檔名和行資訊
來自 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++ 文件 關於 檔名和行資訊
|