#line 指示詞
預處理器指示詞,會將編譯器的內部儲存行號和檔案名設定為指定的值。
#line lineNumber 「filename」 |
---|
參數
項目 | 描述 |
---|---|
lineNumber |
要設定的行號。 這可以是任何整數常數。 只要結果評估為正確的語法,就可以在前置處理標記上執行宏取代。 |
filename [選擇性] |
要設定的檔案名。 檔案名可以是任何字元組合,而且必須以雙引號括住 (「) 。 如果省略此參數,則上一個檔案名會保持不變。 |
備註
編譯器會使用行號和檔案名來參考它在編譯期間發現的錯誤。 行號通常參考目前的輸入行,檔名則參考目前的輸入檔。 每次一行程式碼處理後,行號會遞增。 如果您變更行號和檔名,編譯器會忽略先前的值並以新的值繼續處理。 程式產生器通常會使用 #line 指示詞來造成錯誤訊息參考原始原始程式檔,而不是產生的程式。
翻譯工具使用行號和檔名,判斷預先定義巨集 __FILE__ 和 __LINE__ 的值。 您可以使用這些巨集,將自述性的錯誤訊息插入程式文字中。 __FILE__ 巨集展開為一個內容是檔名的字串,由雙引號 (" ") 括住。
範例
下列範例會將行號設定為 151,並將檔案名設定為 「copy.c」。
#line 151 "copy.c"
在下列範例中,如果指定的判斷提示不是 true,宏 ASSERT 會使用預先定義的宏__LINE__和__FILE__來列印來源檔案的錯誤訊息。
#define ASSERT(cond)
if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}