我想在函数名称的开头连接一些宏:
#include <stdio.h>
#define PFX mypfx
int PFX##_call() {
printf("teeeeeeeeest");
}
int main(void)
{
mypfxcall();
}
上面的代码在编译时返回错误。
如何在函数名称中添加带有宏的前缀?
答案 0 :(得分:2)
为什么不使用namespace
来代替
namespace mypfx
{
int call() {
printf("teeeeeeeeest");
}
}
int main(void)
{
mypfx::call();
}
答案 1 :(得分:1)
##
运算符仅允许您在另一个宏定义内串联两个字符串。
但这是
int PFX##_call()
不是宏定义,因此它将扩展为无效的C:
int mypfx##_call()
有效用法示例:
#define FOO 1
#define BAR 2
#define FB FOO##BAR // FB will expand to FOOBAR
// independently of the macros FOO and BAR
#define BF FOO BAR // BF will expand to 1 2
答案 2 :(得分:1)
我不知道您为什么要这么做(也许是因为您想“模拟”名称空间),但是假设您使用的是C语言,则可以使用以下代码来实现。
#define concat2(X, Y) X ## Y
#define concat(X, Y) concat2(X, Y)
#define pfx(x) concat(pfx_, x)
用法:
int pfx(sum)(int x, int y) {
return x + y;
}
int main() {
printf("%d\n", pfx(sum)(5,4));
}
注意:如果您想使用更多的宏处理能力(我不知道是不是这种情况),则应该访问P99