ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
編譯器和鏈接器的主要功能之一是報(bào)告源代碼程序的診斷消息。診斷消息指示程序可能出了問題。當(dāng)編譯器或鏈接器檢測(cè)到可疑情況時(shí),它會(huì)采用以下格式顯示一條消息:
"file.c", line n : diagnostic severity : diagnostic message
| "file.c" | 所涉及的文件的名稱 |
| line n : | 診斷適用的行號(hào) |
| diagnostic severity | 診斷消息的嚴(yán)重性(嚴(yán)重性類別說(shuō)明如下) |
| diagnostic message | 描述問題的文本 |
診斷消息的嚴(yán)重性如下:
診斷消息以類似于以下示例的形式寫入標(biāo)準(zhǔn)錯(cuò)誤:
"test.c", line 5: error: a break statement may only be used within a loop or switch
break;
^默認(rèn)情況下不會(huì)打印源代碼行。使用 --verbose_diagnostics 編譯器選項(xiàng)來(lái)顯示源代碼行和錯(cuò)誤位置。上面的示例使用了此選項(xiàng)。
消息會(huì)標(biāo)識(shí)診斷中所涉及的文件和行,并且源行本身(位置由 ^ 字符表示)跟在消息之后。如果幾條診斷消息適用于一個(gè)源行,則每條診斷消息都具有所示的形式:源代碼行的文本會(huì)顯示幾次,每次都顯示在一個(gè)適合的位置。
必要時(shí),長(zhǎng)消息會(huì)換行到其他行。
可以使用 --display_error_number 命令行選項(xiàng)來(lái)請(qǐng)求將診斷的數(shù)字標(biāo)識(shí)符包含在診斷消息中。如果顯示了診斷標(biāo)識(shí)符,診斷標(biāo)識(shí)符還指示是否可以在命令行上覆蓋診斷的嚴(yán)重性。如果可以覆蓋嚴(yán)重性,則診斷標(biāo)識(shí)符包括后綴 -D(酌情處理);否則,不存在后綴。例如:
"Test_name.c", line 7: error #64-D: declaration does not declare anything
struct {};
^
"Test_name.c", line 9: error #77: this declaration has no storage class or type specifier
xxxxx;
^由于錯(cuò)誤是根據(jù)特定上下文中的嚴(yán)重性確定的,因此錯(cuò)誤在某些情況下可以是酌情處理的,而在其他情況下則不是。所有警告和備注都是酌情處理的。
對(duì)于某些消息,實(shí)體(函數(shù)、局部變量、源文件等)列表很有用;實(shí)體在初始錯(cuò)誤消息之后列出:
"test.c", line 4: error: more than one instance of overloaded function "f"
matches the argument list:
function "f(int)"
function "f(float)"
argument types are: (double)
f(1.5);
^在某些情況下,還會(huì)提供附加的上下文信息。特別是,如果前端在執(zhí)行模板實(shí)例化時(shí)或在生成構(gòu)造函數(shù)、析構(gòu)函數(shù)或賦值運(yùn)算符函數(shù)時(shí)發(fā)出診斷消息,上下文信息很有用。例如:
"test.c", line 7: error: "A::A()" is inaccessible
B x;
^
detected during implicit generation of "B::B()" at line 7沒有上下文信息,就很難確定錯(cuò)誤指的是什么。