6
我剛剛遇到了ç文件,其中包含兩個預處理指令和線條看起來像這樣:預處理器用「#<number><filename>」做什麼?
# 9 "filename"
我以前從未見過這樣的線路。他們的意思是什麼?我猜這些是預處理指令,但預處理程序對它們做了什麼?
此外,對於一些字符串甚至不表示現有的文件名行的......
我剛剛遇到了ç文件,其中包含兩個預處理指令和線條看起來像這樣:預處理器用「#<number><filename>」做什麼?
# 9 "filename"
我以前從未見過這樣的線路。他們的意思是什麼?我猜這些是預處理指令,但預處理程序對它們做了什麼?
此外,對於一些字符串甚至不表示現有的文件名行的......
我相信這是一個使用#line預處理指令的另一種方式。
例如,你可以寫:
// you could write #line 7 "filename" or
// # 7 "filename" or
// # 7 or
#line 7
int main(void)
{
printf("%d\n", __LINE__);
和他們都將給予您(在這種情況下)10
上stdout
。
關於「文件名」部分的說明,它是可選的和未驗證的(這就是爲什麼它可以是任何東西,甚至是不存在的文件)。它的用途在我提供的鏈接中解釋 -
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.
哦,所以我的問題被誤導了,而這些*畢竟是預處理指令。 – Oak
@Oak - 是的,這只是另一個預處理器指令。通過很好的問題,很難分辨何時不使用它的「線路」部分。 – Mike
剛剛檢查過,確實如此:)謝謝!此外,似乎字符串可以是我想要的任何字符串 - 即使它不是合法的文件名 - 它只會將其用作文件名(例如'__FILE__')。 – Oak