有没有更简单的方法来完成这项工作?

时间:2011-03-18 21:21:44

标签: c

#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 的定义方案???

3 个答案:

答案 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