巨集定義和巨集編譯

2022-07-28 15:21:38 字數 3735 閱讀 6075

// 以下是巨集定義的一些用法
11.4.2 #if defined… #else …#endif

此編譯指令為#ifdef … #else …#endif的等價編譯指令。其語法格式如下:

#if defined 常量表示式

**段1

#else

**段2

#endif

或#if defined (常量表示式)

**段1

#else

**段2

#endif

此編譯指令的簡單形式為單分支的條件編譯指令,其語法形式如下:

#if defined常量表示式

**段1

#endif

因為對於乙個大程式而言,我們可能要定義很多常量( 不管是放在原始檔還是標頭檔案 ),那麼我們有時考慮定義某個常量時,我們就必須返回檢查原來此常量是否定義,但這樣做很麻煩.if defined巨集正是為這種情況提供了解決方案.舉個例子,如下: 

#define ....

#define ....

........

........

#define a 100

.......

此時,我們要檢查a是否定義(假設我們已經記不著這點了),或者我們要給a乙個不同的值,就加入如下句子

#if defined a

#undef a

#define a 200

#endif

上述語句檢驗a是否被定義,如果被定義,則用#undef語句解除定義,並重新定義a為200

同樣,檢驗a是否定義:

#ifndef a //如果a沒有被定義

#define a 100

#endif

以上所用的巨集中:#undef為解除定義,#ifndef是if not defined的縮寫,即如果沒有定義。

這就是#if defined 的唯一作用!

#include extern lcm_driver nt35510_lcm_drv;

extern lcm_driver hx8369_lcm_drv;

extern lcm_driver bm8578_lcm_drv;

extern lcm_driver nt35582_mcu_lcm_drv;

extern lcm_driver hx8357b_lcm_drv;

extern lcm_driver hx8369_dsi_lcm_drv;

extern lcm_driver hx8369_hvga_lcm_drv;

extern lcm_driver ili9481_lcm_drv;

extern lcm_driver nt35582_lcm_drv;

extern lcm_driver s6d0170_lcm_drv;

extern lcm_driver spfd5461a_lcm_drv;

extern lcm_driver ta7601_lcm_drv;

extern lcm_driver tft1p3037_lcm_drv;

extern lcm_driver zte6516_lcm_drv;

extern lcm_driver r61408_lcm_drv;

extern lcm_driver lg4572b_lcm_drv;

lcm_driver* lcm_driver_list =

;#define lcm_compile_assert(condition) lcm_compile_assert_x(condition, __line__)

#define lcm_compile_assert_x(condition, line) lcm_compile_assert_xx(condition, line)

#define lcm_compile_assert_xx(condition, line) char assertion_failed_at_line_##line[(condition)?1:-1]

unsigned int lcm_count = sizeof(lcm_driver_list)/sizeof(lcm_driver*);

lcm_compile_assert(0 != sizeof(lcm_driver_list)/sizeof(lcm_driver*));

extern lcm_driver* lcm_driver_list;

extern unsigned int lcm_count;

const char str="jblcm#1#aaaa";

lcm_driver *disp_drv_get_lcm_driver(const char* lcm_name)

else

;lcm_params *lcm_params_new = &s_lcm_params_new;

lcm = lcm_driver_list[0];

memset((void*)lcm_params, 0, sizeof(lcm_params));

lcm->get_params(lcm_params);

int i;

for(i = 1;i < lcm_count;i++)}}

printf("[lcm auto detect] no lcm device found\n");

printf("[lcm auto detect] we will using the lcm driver with minimum resolution\n");

// if we are here, it means:

// 1.there is no correct driver for the lcm used;

// 2.there is no lcm device connected.

// we will find the lcm with minimum resolution to use,

// in case physical memory is not enough

// goto done;

}#else

else

else

}else

else}}

printf("[lcm auto detect] no lcm device found\n");

printf("[lcm auto detect] we will using the lcm driver with minimum resolution\n");

// if we are here, it means:

// 1.there is no correct driver for the lcm used;

// 2.there is no lcm device connected.

// we will find the lcm with minimum resolution to use,

// in case physical memory is not enough

;lcm_params *lcm_params_new = &s_lcm_params_new;

lcm = lcm_driver_list[0];

memset((void*)lcm_params, 0, sizeof(lcm_params));

lcm->get_params(lcm_params);

for(i = 1;i < lcm_count;i++)}}

} }

abs int 巨集定義 巨集定義和巨集方法

巨集定義和巨集方法 定義機型 define is iphone5 uiscreen instancesrespondtoselector selector currentmode cgsizeequaltosize cgsizemake 640,1136 uiscreen mainscreen cu...

C語言巨集定義和巨集定義函式

c語言巨集定義和巨集定義函式 巨集定義可以幫助我們防止出錯,提高 的可移植性和可讀性等。在軟體開發過程中,經常有一些常用或者通用的功能或者 段,這些功能既可以寫成函式,也可以封裝成為巨集定義。那麼究竟是用函式好,還是巨集定義好?這就要求我們對二者進行合理的取捨。我們來看乙個例子,比較兩個數或者表示式...

xcode 預編譯巨集定義

方法 利用預編譯 巨集定義 方案1 在pch 中定義乙個巨集 version free 來代表 免費版 方案2 targets檔案中定義乙個巨集 中 乙個版本對應乙個targets 檔案 這個檔案裡邊定義著我們應用的圖示 名字 引數 發布的時候 乙個專案按照乙個targets 檔案來發布的 ok 在...