名稱空間
變體
操作

檔名和行資訊

來自 cppreference.com

更改預處理器中的當前行號和檔名。

目錄

[編輯] 語法

#line 行號 (1)
#line 行號 "檔名" (2)

[編輯] 解釋

1) 將當前預處理器行號更改為 行號。此後,宏 __LINE__ 的出現將展開為 行號 加上此後遇到的實際原始碼行數。
2) 還會將當前預處理器檔名更改為 檔名。此後,宏 __FILE__ 的出現將生成 檔名

任何預處理記號(宏常量或表示式)都允許作為 #line 的引數,只要它們展開為有效的十進位制整數,可選地後跟一個有效的字串。

行號 必須是至少一個十進位制數字的序列(否則程式格式錯誤),並且始終解釋為十進位制(即使它以 0 開頭)。

如果 行號0 或大於 32767(C99 前)2147483647(C99 起),則行為未定義。

[編輯] 注意

此指令由一些自動化程式碼生成工具使用,這些工具從用另一種語言編寫的檔案生成 C 原始檔。在這種情況下,#line 指令可以插入到生成的 C 檔案中,引用原始(可人工編輯的)原始檔的行號和檔名。

指令 #line __LINE__ 之後的行號是未指定的(在這種情況下,__LINE__ 可以展開為兩個可能的值:到目前為止遇到的換行符數,或者到目前為止遇到的換行符數加上結束 #line 指令的換行符)。這是 DR 464 的結果,該結果具有追溯力。

[編輯] 示例

#include <assert.h>
#define FNAME "test.c"
int main(void)
{
#line 777 FNAME
        assert(2+2 == 5);
}

可能的輸出

test: test.c:777: int main(): Assertion `2+2 == 5' failed.

[編輯] 參考

  • C17 標準 (ISO/IEC 9899:2018)
  • 6.10.4 行控制 (p: 126)
  • J.1 未指定行為
  • C11 標準 (ISO/IEC 9899:2011)
  • 6.10.4 行控制 (p: 173)
  • C99 標準 (ISO/IEC 9899:1999)
  • 6.10.4 行控制 (p: 158)
  • C89/C90 標準 (ISO/IEC 9899:1990)
  • 3.8.4 行控制

[編輯] 另請參閱

C++ 文件 關於 檔名和行資訊