#include <stdio.h>
#define STR(x) #x
#define STR2(x) STR(x)
#define LINE_FILE ("Line " STR2(__LINE__) " of file " STR2(__FILE__))
int main(void)
{
const char *str = LINE_FILE;
printf("%s\n", str);
return 0;
}
这是唯一可以让STR(x)打印实际 LINE 和 FILE 的定义方案???
答案 0 :(得分:5)
STR2(__FILE__)
__FILE__
已经是字符串文字:您不需要在此使用STR2
。
如果你想这样做,你也应该从宏中删除括号,以便它可以与其他字符串文字连接:
#define LINE_FILE "Line " STR2(__LINE__) " of file " __FILE__
答案 1 :(得分:4)
printf("Line %d of file %s\n", __LINE__,__FILE__);
答案 2 :(得分:0)
不是答案,但也许有人可以制作一个。 您不仅可以使用“##”
连接宏中的字符串但这不起作用:
#define LINE_FILE "Line " ## (__LINE__) ## " of file " __FILE__
其余的#define取自James McNellis