Search code examples
cc-preprocessorstringification

How to cause macro expansion before concatenation?


#define JNI_DECLARE( classname, methodname ) \
     classname  ## methodname( JNI* env ) 

#define JAVA_CLASS Java_com_example
void JNI_DECLARE( JAVA_CLASS, open ) {}

This expands to:

void JAVA_CLASS_open( JNI* env ) {}

How do I get:

void Java_com_example_open( JNI* env ) {}

?


Solution

  • #define JNI_DECLARE_INNER( classname, methodname ) \
         classname  ## _ ## methodname( JNI* env )
    #define JNI_DECLARE( classname, methodname ) \
         JNI_DECLARE_INNER(classname, methodname)
    

    see more here: C Preprocessor, Stringify the result of a macro