Probleme beim Nutzen von Variadic Macros
-
Hallo, der folgende Code wird korrekt compiliert und ausgeführt.
void systemManager_systemType_create(void(*system)(ComponentTable), char const *const componentNames); #define systemManager_system_register(system, components...)\ systemManager_systemType_create(system, #components);
Bei dieser Version jedoch:
void systemManager_systemType_create(void(*system)(ComponentTable), char* s); #define systemManager_system_register(system, ...)\ systemManager_systemType_create(system, #__VAR_ARGS__);
bekomme ich diesen Error:
ecs.h:92:50: error: '#' is not followed by a macro parameter #define systemManager_system_register(system, ...)\ ^~ systemManager_systemType_create(system, #__VAR_ARGS__); entityManager.c: In function ‘main’: entityManager.c:43:2: warning: implicit declaration of function ‘systemManager_system_register’; did you mean ‘systemManager_systemType_create’? [-Wimplicit-function-declaration] systemManager_system_register(move, Position);
Ich möchte die erste Version nicht benutzen, weil sie gcc spezifisch ist. Was ist die Ursache für das Problem?
-
Mach mal das
#
weg.
-
error: __VAR_ARGS__ undeclared (first use in this function); did you mean __CHAR_BIT__?
Interressant, Ich habe stdarg.h aber includiert.
-
Oh, da ist noch ein R zu viel:
__VA_ARGS__
heißt das. Fehlt beim schnellen Lesen gar nicht auf. Das#
sollte da aber trotzdem nicht hin.
-
Ups ja vielen Dank...echt trivialer Fehler. Doch, ich möchte ja die Argumente als string benutzen.