共用方式為


#line 指示詞 (C/C++)

#line 指示詞會告訴預處理器,將編譯器針對行號和檔案名的報告值設定為指定的行號和檔案名。

語法

#linedigit-sequence [「 filename 」]

備註

編譯器會使用這個行號和選擇性檔名來指向它在編譯期間發現的錯誤。 行號通常參考目前的輸入行,檔名則參考目前的輸入檔。 每次一行程式碼處理後,行號會遞增。

數位 序列 值可以是介於 0 到內含2147483647範圍內的任何整數常數。 宏取代可以在前置處理標記上使用,但結果必須評估為正確的語法。 檔案名 可以是字元的任何組合,而且必須以雙引號 ( " " ) 括住。 如果 省略 filename ,則上一個檔案名會保持不變。

您可以藉由撰寫 #line 指示詞來改變來源行號和檔案名。 指示 #line 詞會設定緊接在原始程式檔中 指示詞後面的行值。 翻譯工具會使用行號和檔案名來判斷預先定義宏 __FILE____LINE__ 的值。 您可以使用這些巨集,將自述性的錯誤訊息插入程式文字中。 如需這些預先定義宏的詳細資訊,請參閱 預先定義的宏

__FILE__ 會展開至字串,其內容為檔案名,以雙引號 ( " " ) 括住。

如果您變更行號和檔名,編譯器會忽略先前的值並以新的值繼續處理。 程式產生器通常會使用 #line 指示詞。 它用來造成錯誤訊息參考原始程式檔,而不是產生的程式。

範例

下列範例說明 #line__LINE____FILE__

在第一個範例中,行號設定為 10,然後設為 20,檔案名會變更為 hello.cpp

// line_directive.cpp
// Compile by using: cl /W4 /EHsc line_directive.cpp
#include <stdio.h>

int main()
{
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 10
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 20 "hello.cpp"
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
}
This code is on line 7, in file line_directive.cpp
This code is on line 10, in file line_directive.cpp
This code is on line 20, in file hello.cpp
This code is on line 21, in file hello.cpp

在此範例中,宏 ASSERT 會使用預先定義的宏 __LINE__ ,並在 __FILE__ 指定的判斷提示不是 true 時列印有關來源檔案的錯誤訊息。

#define ASSERT(cond) if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}

另請參閱

預處理器指示詞