檔名和行資訊
來自 cppreference.com
更改預處理器中原始碼的行號,以及可選地更改當前檔名。
目錄 |
[編輯] 語法
#line 行號 |
(1) | ||||||||
#line 行號 " 檔名" |
(2) | ||||||||
[編輯] 解釋
1) 將當前預處理器行號更改為 行號。此後宏 __LINE__ 的擴充套件將擴充套件為 行號 加上此後遇到的實際原始碼行數。
2) 同時將當前預處理器檔名更改為 檔名。此後宏 __FILE__ 的擴充套件將生成 檔名。
任何預處理記號(宏常量或表示式)都可以作為 #line 的引數,只要它們擴充套件為有效的十進位制整數,其後可選地跟一個有效的字串。
行號 必須是至少一個十進位制數字的序列(否則程式格式錯誤),並且總是被解釋為十進位制(即使它以 0
開頭)。
如果 行號 為 0
或大於 32767
(C++11 之前)2147483647
(C++11 起),則行為未定義。
[編輯] 注意
此指令被一些自動程式碼生成工具使用,這些工具從用另一種語言編寫的檔案生成 C++ 原始檔。在這種情況下,#line 指令可以插入到生成的 C++ 檔案中,引用原始(可人工編輯的)原始檔的行號和檔名。
[編輯] 示例
執行此程式碼
#include <cassert> #define FNAME "test.cc" int main() { #line 777 FNAME assert(2+2 == 5); }
可能的輸出
test: test.cc:777: int main(): Assertion `2+2 == 5' failed.
[編輯] 參考
- C++23 標準 (ISO/IEC 14882:2024)
- 15.7 行控制 [cpp.line]
- C++20 標準 (ISO/IEC 14882:2020)
- 15.7 行控制 [cpp.line]
- C++17 標準 (ISO/IEC 14882:2017)
- 19.4 行控制 [cpp.line]
- C++14 標準 (ISO/IEC 14882:2014)
- 16.4 行控制 [cpp.line]
- C++11 標準 (ISO/IEC 14882:2011)
- 16.4 行控制 [cpp.line]
- C++98 標準 (ISO/IEC 14882:1998)
- 16.4 行控制 [cpp.line]
[編輯] 另請參閱
(C++20) |
一個表示原始碼資訊的類,例如檔名、行號和函式名 (類) |
C 文件 用於 檔名和行資訊
|