2011-03-18 146 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採取

相關問題