2011-08-12 10 views
11
#define JNI_DECLARE(classname, methodname) \ 
    classname ## methodname(JNI* env) 

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

これは、次のように拡張されます連結前にマクロを展開する方法は?

void JAVA_CLASS_open(JNI* env) {} 

どのように入手できます:

void Java_com_example_open(JNI* env) {} 

答えて

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

はもっとここを参照してください:C Preprocessor, Stringify the result of a macro

+0

側の注意点として、IAR EWARM 6.4コンパイラが間違ったことをしていることを私はかなり自信を持って。私はIAR EWARMとgccで同じコードを実行しました.GCCは私が期待したことを行い、IARはそうしませんでした。 –

+0

hmm ..プリプロセッサフ​​ェーズではgccを使うことができます –

関連する問題