2011-03-18 153 views
1
#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)的打印实际LINEFILE ???有没有更简单的方法来完成这项工作?

回答

5
STR2(__FILE__) 

__FILE__已经是一个字符串文字:您不需要在这里使用STR2

你应该也可能是从宏观删除括号,以便它可以与其他字符串文字连在一起,如果你想这样做:

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

非常感谢!但是STR2(__LINE__)呢?这是使用定义来打印行号的唯一方法吗? – GaryHull 2011-03-18 21:27:34

+0

@garihull:这是将行号转换为字符串文字的唯一方法,是的。 '__LINE__'是一个整数值,而不是一个字符串。 – 2011-03-18 21:28:48

4

printf("Line %d of file %s\n", __LINE__,__FILE__);

+0

!我正在寻找一种使用定义的方法! – GaryHull 2011-03-18 21:28:59

0

不是一个答案,但也许有人可以从中做出一个。 您可以通过使用串连不仅在宏字符串“##”

但是,这并不工作:#定义的

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

其余部分由詹姆斯McNellis采取

相关问题