我不确定这是否可行,但是我想创建一个共享对象文件,我希望通过使用#define
来解除函数名称来使其易于使用
在 libfoo.h
中#define FOO_SO_FUNCTION_A aFunction
在 libfoo.so
中#include "libfoo/libfoo.h"
extern "C" int FOO_SO_FUNCTION_A( void )
{
...
}
在 clientfoo
中#include "libfoo/libfoo.h"
...
libfoofunc = dlsym( libfoo, MAKE_STRING(FOO_SO_FUNCTION_A) );
我的问题是
#FOO_SO_FUNCTION_A
只需更改为“FOO_SO_FUNCTION_A”,因为预处理器只运行一次。还有另一种方法可以实现这个目标吗?
答案 0 :(得分:5)
使用此:
#define REALLY_MAKE_STRING(x) #x
#define MAKE_STRING(x) REALLY_MAKE_STRING(x)
由于规则的一些细节,当预处理器完全替换宏时,需要额外的间接级别。