# line 指示詞 (C/C++)
#line指示詞告訴前置處理器將編譯器的內部預存的行號和檔名變更為指定的行號和檔案名稱。
#line digit-sequence ["filename"]
備註
編譯器會使用的行號和選擇性的檔案名稱來參照它在編譯期間所找到的錯誤。 行號通常是指到目前的輸入行,並指向目前的輸入檔的檔名。 在處理每一行之後,就會增加的行號。
數字序列值可以是任何整數常數。 前置處理的語彙基元,無法執行巨集取代,但結果都必評估為正確的語法。 檔名 可以是任意的字元組合,而且必須以雙引號括住 ("")。 如果檔名被省略,先前的檔名維持不變。
您可以藉由撰寫改變的來源行號和檔名#line指示詞。 轉譯程式使用的行號和檔名來決定的值,預先定義的巨集的 __FILE__ 和 __line__ 做。 您可以使用這些巨集的程式文字中插入表示其含義的錯誤訊息。 如需有關這些預先定義的巨集的詳細資訊,請參閱預先定義的巨集。
__FILE__ 巨集會擴充為其內容是檔名,以雙引號括住的字串 ("")。
如果您變更的行號和檔名,編譯器會略過先前的值,並繼續進行處理的新值。 #line指示詞通常是由程式產生器會造成錯誤訊息,以參照至產生的程式而不是原始來源檔案。
下列範例說明#line和 __line__ 做和 __FILE__ 巨集。
在這個陳述式,在內部預存的行號設定為 [151 和檔名變更為copy.c。
#line 151 "copy.c"
在這個範例中,該巨集ASSERT會使用預先定義的巨集 __line__ 做和 __FILE__ 要列印的原始程式檔的相關錯誤訊息,如果指定的 「 判斷提示"不是,則為 true。
#define ASSERT(cond)
if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}