一、C语言定义的函数名里面插入宏定义,对函数名进行封装,可以通过宏定义批量修改整个文件的函数名里面的内容。使用下面的代码对函数进行封装,这样移植的时候可以根据包名和类名进行批量修改,不用一个函数一个函数的修改。。
#define PACKAGE_NAME com_xxx_xxx
#define CLASS_NAME xxxx
#define FUNCTION_STYLE_INNER(packagename, classname ,functionanme) Java_##packagename##_##classname##_##functionanme
#define FUNCTION_STYLE(packagename, classname ,functionanme) FUNCTION_STYLE_INNER(packagename, classname ,functionanme)
#define JNI_FUNCTION(functionanme) FUNCTION_STYLE(PACKAGE_NAME,CLASS_NAME,functionanme)
二、需要注意的知识点:
在C语言中,##
运算符在宏定义中用于连接两个令牌。然而,当使用宏参数与 ##
运算符一起使用时,并且这些参数本身是宏时,直接使用 ##
运算符将不会导致参数宏的展开。这是因为宏的展开顺序规则导致 ##
阻止了参数宏先于连接操作的展开。
为了解决这个问题,通常需要使用两层宏:一层用于参数宏的展开,另一层用于连接操作。