C語言的條件編譯

2021-05-22 17:45:54 字數 1986 閱讀 6575

預處理程式提供了條件編譯的功能。 可以按不同的條件去編譯不同的程式部分,因而產生不同的目標**檔案。 這對於程式的移植和除錯是很有用的。

條件編譯有三種形式,下面分別介紹:

1. 第一種形式:

#ifdef 識別符號

程式段1

#else

程式段2

#endif

它的功能是,如果識別符號已被 #define命令定義過則對程式段1進行編譯;否則對程式段2進行編譯。如果沒有程式段2(它為空),本格式中的#else可以沒有, 即可以寫為:

#ifdef 識別符號

程式段#endif

#define num ok

main() *ps;

ps=(struct stu*)malloc(sizeof(struct stu));

ps->num=102;

ps->name="zhang ping";

ps->***='m';

ps->score=62.5;

#ifdef num

printf("number=%d/nscore=%f/n",ps->num,ps->score);

#else

printf("name=%s/n***=%c/n",ps->name,ps->***);

#endif

free(ps);

}由於在程式的第16行插入了條件編譯預處理命令, 因此要根據num是否被定義過來決定編譯那乙個printf語句。而在程式的第一行

已對num作過巨集定義,因此應對第乙個printf語句作編譯故執行結果是輸出了學號和成績。在程式的第一行巨集定義中,定義num表示字串ok,其實也可以為任何字串,甚至不給出任何字串,寫為:

#define num

也具有同樣的意義。 只有取消程式的第一行才會去編譯第二個

printf語句。讀者可上機試作。

2. 第二種形式:

#ifndef 識別符號

程式段1

#else

程式段2

#endif

與第一種形式的區別是將「ifdef」改為「ifndef」。它的功能是,如果識別符號未被#define命令定義過則對程式段1進行編譯, 否則對程式段2進行編譯。這與第一種形式的功能正相反。

3. 第三種形式:

#if 常量表示式

程式段1

#else

程式段2

#endif

它的功能是,如常量表示式的值為真(非0),則對程式段1 進行編譯,否則對程式段2進行編譯。因此可以使程式在不同條件下,完  成不同的功能。

#define r 1

main()

本例中採用了第三種形式的條件編譯。在程式第一行巨集定義中,定義r為1,因此在條件編譯時,常量表示式的值為真, 故計算並輸出圓面積。

上面介紹的條件編譯當然也可以用條件語句來實現。 但是用條件語句將會對整個源程式進行編譯,生成的目標**程式很長, 而採用條件編譯,則根據條件只編譯其中的程式段1或程式段2, 生成的目標程式較短。如果條件選擇的程式段很長, 採用條件編譯的方法是十分必要的。

☆本章小結☆

1. 預處理功能是c語言特有的功能,它是在對源程式正式編譯前由處理程式完成的。程式設計師在程式中用預處理命令來呼叫這些功能。

2. 巨集定義是用乙個識別符號來表示乙個字串,這個字串可以是常量、變數或表示式。在巨集呼叫中將用該字串代換巨集名。

3. 巨集定義可以帶有引數,巨集呼叫時是以實參代換形參。而不是「值傳送」。

4. 為了避免巨集代換時發生錯誤,巨集定義中的字串應加括號,字串中出現的形式引數兩邊也應加括號。

5. 檔案包含是預處理的乙個重要功能,它可用來把多個原始檔連線成乙個原始檔進行編譯,結果將生成乙個目標檔案。

6. 條件編譯允許只編譯源程式中滿足條件的程式段,使生成的目標程式較短,從而減少了記憶體的開銷並提高了程式的效率。

7. 使用預處理功能便於程式的修改、閱讀、移植和除錯,也便於實現模組化程式設計。

c語言的條件編譯

條件編譯指令將決定那些 被編譯,而哪些是不被編譯的。可以根據表示式的值或者某個特定的巨集是否被定義來確定編譯條件。一.if else elif和 endif指令 1 if 表示式 語句段1 else 語句段2 endif 例項 include include if val min int min i...

C語言的條件編譯

有些程式在除錯 相容性 平台移植等情況下可能想要通過簡單地設定一些引數就生成乙個不同的軟體,這當然可以通過變數設定,把所有可能用到的 都寫進去,在初始化時配置,但在不同的情況下可能只用到一部分 就沒必要把所有的 都寫進去,就可以用條件編譯,通過預編譯指令設定編譯條件,在不同的需要時編譯不同的 一 條...

C語言中的條件編譯

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