2012-11-01 30 views
6

我剛剛遇到了ç文件,其中包含兩個預處理指令和線條看起來像這樣:預處理器用「#<number><filename>」做什麼?

# 9 "filename" 

我以前從未見過這樣的線路。他們的意思是什麼?我猜這些是預處理指令,但預處理程序對它們做了什麼?

此外,對於一些字符串甚至不表示現有的文件名行的......

回答

4

我相信這是一個使用#line預處理指令的另一種方式。

例如,你可以寫:

// you could write #line 7 "filename" or 
// # 7 "filename" or 
// # 7 or 
#line 7 
int main(void) 
{ 
     printf("%d\n", __LINE__); 

和他們都將給予您(在這種情況下)10stdout

關於「文件名」部分的說明,它是可選的和未驗證的(這就是爲什麼它可以是任何東西,甚至是不存在的文件)。它的用途在我提供的鏈接中解釋 -
If you specify a file name, the compiler views the next line as part of the specified file. If you do not specify a file name, the compiler views the next line as part of the current source file.

+0

哦,所以我的問題被誤導了,而這些*畢竟是預處理指令。 – Oak

+0

@Oak - 是的,這只是另一個預處理器指令。通過很好的問題,很難分辨何時不使用它的「線路」部分。 – Mike

+0

剛剛檢查過,確實如此:)謝謝!此外,似乎字符串可以是我想要的任何字符串 - 即使它不是合法的文件名 - 它只會將其用作文件名(例如'__FILE__')。 – Oak