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