C語言的編譯期行為(二) error預處理器指令

2021-05-27 09:36:27 字數 701 閱讀 8569

#error預處理器指令

格式:#error any message

該預處理將產生一條編譯時錯誤資訊,資訊中包含#error後指定的內容。

c語言標準中,要求對於#error後面的指定的內容也進行巨集展開,但在我測試後發現visual studio 2008並沒有對這一特性提供支援。所以,在我們的程式中,應盡量避免出現不同編譯器實現可能各不相同的標準特性。

該預處理器指令看似無用,因為一旦遇到它,程式的編譯過程就會出錯,無法完成編譯。那麼它應該用在什麼場合呢?

大家想必對」斷言「早有耳聞。在程式執行時,一旦遇到斷言不成立,程式即會報錯終止,以方便程式除錯。#error與#if搭配使用可以認為是乙個用於除錯巨集的編譯期斷言。乙個典型的用途如下**所示:

#include // condition_a與condition_b不能同時定義,否則會造成錯誤

#define condition_a

#define condition_b

int main(int argc, char** argv)

上面的**會引發乙個#error錯誤。

綜上,對含有複雜邏輯的巨集**使用#error是乙個很好用的技巧。它確保了程式在關鍵點上確實按照程式設計師的想法被預處理,否則便無法編譯通過。而且,重要的是:編譯期行為不會引起任何執行期的資源開銷。

C 語言的黑客行為

在c 中,利用c 編譯器在實現虛函式呼叫時的某些伎倆,我們可以在類外直接呼叫到類的私有成員函式!如下,中有詳細的說明。cpp view plain copy c 語言的黑客行為 include class coo void coo foo intmain 注意 這裡沒有建立物件 即沒有this指標 ...

C語言中出現error的解決辦法

1.error expected unqualified id before 後面的分號一定不能落下 3.undefined reference to winmain 16 這個錯誤是出現在主函式缺少的情況下。其中一種情況是當需要用另乙個同名檔案來覆蓋當前檔案時,如果你使用的是ctrl a ctrl...

C語言的條件編譯

預處理程式提供了條件編譯的功能。可以按不同的條件去編譯不同的程式部分,因而產生不同的目標 檔案。這對於程式的移植和除錯是很有用的。條件編譯有三種形式,下面分別介紹 1.第一種形式 ifdef 識別符號 程式段1 else 程式段2 endif 它的功能是,如果識別符號已被 define命令定義過則對...