Summary
1)#error
用於生成一個編譯錯誤
資訊;#warning
用於生成一個編譯警告
資訊;
2)編譯過程中的任何錯誤資訊意味著無法生成最終的可執行程式
3)語法:#error/#warning message
,message不需要用雙引號包圍
4)#line
用於指定後續程式碼的起始行號和檔名
5)語法:#line line filename
filename可勝率,是個字串(雙引號)
·#error和#line分析
1、#error和#warning
#error
用於生成一個編譯錯誤
資訊;#warning
用於生成一個編譯警告
資訊;
#error
是一種預編譯器指示字
,可用於提示編譯條件是否滿足
。
注意:編譯過程中的任何錯誤資訊意味著無法生成最終的可執行程式
語法:#error message
,message不需要用雙引號包圍
#ifndef __cplusplus
#error This file should be processed with C++ compiler.
#endif
使用gcc編譯器編譯:gcc test.c
輸出:test.c 4: error: #error This file should be processed with C++ compiler.
不會生成可執行程式
使用g++編譯器編譯:g++ test.c
可以生成可執行程式
分析:__cplusplus是C++編譯器裡特有的巨集,
使用gcc時,無法識別這個巨集,
因此輸出了一條錯誤資訊,並且由於存在錯誤資訊,可執行程式無法生成;
使用g++時,就會跳過該段預處理。
#ifndef __cplusplus
#warning This file should be processed with C++ compiler.
#endif
使用gcc編譯器編譯:gcc test.c
輸出:test.c 4: warning: #warning This file should be processed with C++ compiler.
雖然提示了警告,但是會生成可執行程式
2、#line
#line
用於強制指定新的行號和編譯檔名,並對源程式的程式碼重新編號;本質重定義__LINE__和__FILE__。用法
:#line number filename (filename可省略)
#line 1 "delphi.c" : 指定當前宣告處的下一行為第1行,指定當前檔名為"delphi.c"
背景
:最開始大家都把程式碼寫在一個檔案裡,比如3個開發同時完成了一個.c檔案,這時候出錯了就不好定位是誰寫的程式碼出問題了。所以就用#line這個預處理指示字,來指明每一段程式碼的行號和檔名。下次出問題報錯,就知道是誰的程式碼寫錯了。
本文總結自“狄泰軟體學院”唐佐林老師《C語言進階課程》。
如有錯漏之處,懇請指正。