使用 #define 作为标识符(函数名称)和字符串的预处理器语法
我不确定这是否可行,但我想创建一个共享对象文件,并且希望通过可用于取消引用该函数的 #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”,因为预处理器只运行一次。还有其他方法可以实现此目的吗?
I'm not sure if this is possible, but I would like to create a shared object file and I would like to make it easy to use by having a #define
that can be used to dereference the function names.
In libfoo.h
#define FOO_SO_FUNCTION_A aFunction
In libfoo.so
#include "libfoo/libfoo.h"
extern "C" int FOO_SO_FUNCTION_A( void )
{
...
}
In clientfoo
#include "libfoo/libfoo.h"
...
libfoofunc = dlsym( libfoo, MAKE_STRING(FOO_SO_FUNCTION_A) );
My problem is that
#FOO_SO_FUNCTION_A
Will simply change into "FOO_SO_FUNCTION_A" because the preprocessor rightfully only runs once. Is there another way to accomplish this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用这个:
由于预处理器替换宏时规则的一些细节,需要额外的间接级别。
Use this:
Due to some details of the rules when exactly the preprocessors substitutes macros, an extra level of indirection is required.