我不确定是否可行,但是我想创建一个共享对象文件,并且希望通过使用#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”,因为预处理器正确地只能运行一次。还有另一种方法可以做到这一点吗?

最佳答案

用这个:

#define REALLY_MAKE_STRING(x) #x
#define MAKE_STRING(x) REALLY_MAKE_STRING(x)

由于规则的一些细节,正是当预处理器确切地替代宏时,需要额外的间接级别。

关于c++ - 使用#define作为标识符(函数名)和字符串的预处理器语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2336952/

10-09 18:33