C語言基礎 條件編譯

2021-07-22 14:19:49 字數 2183 閱讀 6829

指令  用途

# 空指令,無任何效果

#include 包含乙個源**檔案

#define 定義巨集

#undef 取消已定義的巨集

#if 如果給定條件為真,則編譯下面**

#ifdef 如果巨集已經定義,則編譯下面**

#ifndef 如果巨集沒有定義,則編譯下面**

#elif 如果前面的#if給定條件不為真,當前條件為真,則編譯下面**,其實就是else if的簡寫

#endif 結束乙個#if……#else條件編譯塊

#error 停止編譯並顯示錯誤資訊

#define     hal_led_en                          true         /* led指示燈使能      */

#define hal_led_default_max_leds 7 /* 定義led燈最大數目 */

#define hal_turn_on_led1 led1_on /* 點亮 led1 */

(1)

//假如定義了某個巨集

#if defined hal_turn_on_led1

......

#endif

相當於#ifdef hal_turn_on_led1

......

#endif

例項:#define a 100

#if defined a

#undef a

#define a 200

#endif

假如定義了a,#undef解除a定義,並重新定義a為200;很多情況下使用#ifdef即可

(2)

//假如沒有定義了某個巨集

#if !defined hal_turn_on_led1

......

#endif

相當於#ifndef hal_turn_on_led1

......

#endif

(3)

什麼情況下需要使用defined或!defined呢?我現在碰到的情況是這樣

例項: 在使能 hal_led_en 之時,必須保證定義了 hal_turn_on_led1,

如果沒有定義的話,當預處理器預處理到#error命令時將停止編譯並輸出使用者自定義的錯誤訊息

#if (hal_led_en == true) && (!defined hal_turn_on_led1)

#error hal_turn_on_led1 no define!

#endif

當然了,上面的例子也可以寫成下面這樣的形式

#if (hal_led_en == true)

#ifndef hal_turn_on_led1

#error hal_turn_on_led1 is no defined!

#endif

#endif

但是如果需要判斷的巨集定義太多,第一種寫法的優勢就體現出來了

#if (hal_led_en == true) && (!defined hal_turn_on_led1) && ((!defined hal_turn_on_led2) || (!defined hal_turn_on_led3))

#error hal_turn_on_led1 no define!

#endif

(4)

#if hal_led_default_max_leds == 7

#define a 100

#elif (hal_led_default_max_leds == 6) || (hal_led_default_max_leds == 5)

#define a 200

#else

#define a 300

#endif

C 基礎 條件編譯

條件編譯 件編譯命令可以使得編譯器按不同的條件去編譯程式不同的部分,產生不同的目標 檔案。也就是說,通過條件編譯命令,某些程式 要在滿足一定條件下才被編譯,否則將不被編譯。常用的條件編譯命令有如下三種格式 9.3.1 格式一 ifdef 識別符號 程式段1 else 程式段2 endif 其中,if...

C語言的條件編譯

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

c語言的條件編譯

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