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?


  • Mod

    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.


  • Mod

    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.


Log in to reply