我可以在 C 的预处理器连接中使用“(”吗?
Can I use "(" in preprocessor concatenation in C?
以下在 GCC 中给出了这个错误:粘贴“func_x”和“(”没有提供有效的预处理标记
#include <stdio.h>
#define LOG_FUNC(fname) printf( #fname " %d\n", fname ## ())
int func_x(){
return 0;
}
int main(){
LOG_FUNC(func_x);
return 0;
}
但是,当我将鼠标悬停在函数顶部时,它显示宏扩展为以下表达式,可以正常工作
printf("func_x" " %d\n", func_x())
是否是因为预处理字符串连接中不允许使用括号?
如果您想让代码编译,请将 LOG_FUNC
更改为:
#define LOG_FUNC(fname) printf( #fname " %d\n", fname())
如果要将两个字符串连接在一起,只需将它们并排书写,并用空格分隔即可。如果它们包含括号就可以了。您不必为此使用预处理器,但您可以:
#include <stdio.h>
#define MY_STR(f) f "(\n"
int main() {
puts(MY_STR("hi")); // outputs "hi("
return 0;
}
以下在 GCC 中给出了这个错误:粘贴“func_x”和“(”没有提供有效的预处理标记
#include <stdio.h>
#define LOG_FUNC(fname) printf( #fname " %d\n", fname ## ())
int func_x(){
return 0;
}
int main(){
LOG_FUNC(func_x);
return 0;
}
但是,当我将鼠标悬停在函数顶部时,它显示宏扩展为以下表达式,可以正常工作
printf("func_x" " %d\n", func_x())
是否是因为预处理字符串连接中不允许使用括号?
如果您想让代码编译,请将 LOG_FUNC
更改为:
#define LOG_FUNC(fname) printf( #fname " %d\n", fname())
如果要将两个字符串连接在一起,只需将它们并排书写,并用空格分隔即可。如果它们包含括号就可以了。您不必为此使用预处理器,但您可以:
#include <stdio.h>
#define MY_STR(f) f "(\n"
int main() {
puts(MY_STR("hi")); // outputs "hi("
return 0;
}