Mam sytuację, w której mam kilka generowanych funkcji i chciałbym wskazać im niektóre ogólne funkcje, które utworzyłem (aby umożliwić ponowne użycie kodu bazowego, gdy wygenerowane nazwy funkcji ulegają zmianie).C definiowanie pre-procesora dla wygenerowanych nazw funkcji
Zasadniczo mam listę nazw funkcji w następujący sposób:
void Callback_SignalName1(void);
void Callback_SignalName2(void);
...etc
Gdy te są generowane, chciałbym zdefiniować makro, aby mogły być nazywane ogólnie. Mój pomysł był, ale nie miałem szczęścia wdrożenie go ... jak C pre-procesor bierze nazwę makra zamiast co makro jest zdefiniowany jako:
#define SIGNAL1 SignalName1
#define SIGNAL2 SignalName2
#define FUNCTION_NAME(signal) (void Callback_ ## signal ## (void))
...
...
FUNCTION_NAME(SIGNAL1)
{
..
return;
}
Emisja jest to, że mogę otrzymać
void Callback_SIGNAL1(void)
zamiast
void Callback_SignalName1(void)
Czy istnieje dobry sposób obejścia tego?
nie powinno być #define FUNCTION_NAME (Nazwafunkcji) void Nazwafunkcji (void)? –
Przepraszam, zredagowałem dla nieco więcej wyjaśnień ... Pominąłem ważną część, że jest tam inna część nazwy funkcji, która tam wchodzi ... – espais
Zauważ, że ## pomiędzy 'signal' i' (void) ' nie jest poprawne. ## służy do tworzenia pojedynczego tokena poprzez łączenie wielu tokenów. Otwarty nawias nie może być (i nie powinien być!) Częścią tokena, który będzie nazwą funkcji. –