做这项工作有没有更简单的方法? #包括 #定义STR(x)#x #定义STR2(x)STR(x) #定义行\u文件(“行”STR2(\uuu行\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 内部主(空) { const char*str=LINE_文件; printf(“%s\n”,str); 返回0; }

做这项工作有没有更简单的方法? #包括 #定义STR(x)#x #定义STR2(x)STR(x) #定义行\u文件(“行”STR2(\uuu行\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 内部主(空) { const char*str=LINE_文件; printf(“%s\n”,str); 返回0; },c,C,这是唯一使STR(x)打印实际行和文件的定义方案吗 #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); retur

这是唯一使STR(x)打印实际行和文件的定义方案吗

#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;
}
\uuuu文件\uuuu
已经是一个字符串文本:您不需要在此处使用
STR2

如果您想这样做,您可能还应该从宏中删除括号,以便它可以与其他字符串文字连接:

STR2(__FILE__)
\uuuu文件\uuuu
已经是一个字符串文本:您不需要在此处使用
STR2

如果您想这样做,您可能还应该从宏中删除括号,以便它可以与其他字符串文字连接:

STR2(__FILE__)

printf(“文件%s\n的第%d行,uu行,uu文件,uu)

printf(“文件%s\n的第%d行,uu行,u文件u)

不是答案,但也许有人能从中找出答案。 使用“##”不仅可以连接宏中的字符串

但这不起作用:

#define LINE_FILE "Line " STR2(__LINE__) " of file " __FILE__

其余的定义取自詹姆斯·麦克内利斯(James McNellis)

并不是一个答案,但也许有人能从中得出一个答案。 使用“##”不仅可以连接宏中的字符串

但这不起作用:

#define LINE_FILE "Line " STR2(__LINE__) " of file " __FILE__

其余的#define来自James McNellis

非常感谢!但是STR2(线路)呢?这是使用定义打印行号的唯一方法吗?@garihull:是的,这是将行号转换为字符串文字的唯一方法<代码>\uuuu行\uuuu
是一个整数值,不是字符串。非常感谢!但是STR2(线路)呢?这是使用定义打印行号的唯一方法吗?@garihull:是的,这是将行号转换为字符串文字的唯一方法<代码>\uuuu行\uuuu
是一个整数值,而不是字符串。