#define

簡單的#define定義

#define MAXTIME 1000
一個簡單的MAXTIME就定義好了,它代表1000,如果在程序里面寫 if(i<MAXTIME){.........}編譯器在處理這個代碼之前會對MAXTIME進行處理替換為1000.這樣的定義看起來類似于普通的常量定義CONST,但也有著不同,因為define的定義更像是簡單的文本替換,而不是作為一個量來使用。


#define的函數定義

define可以像函數那樣接受一些參數,如下
#define max(x,y) (x)>(y)?(x):(y);
但是存在隱患
比如:

#define pin (int*);
pin a,b;

本意是a和b都是int型指針,但是實際上變成int* a,b; a是int型指針,而b是int型變量。 這是應該使用typedef來代替define,這樣a和b就都是int型指針了。 所以我們在定義的時候,養成一個良好的習慣,建議所有的層次都要加括號。


#define的多行定義

define可以替代多行的代碼,例如MFC中的宏定義

#define MACRO(arg1, arg2) 
do { \ 
/* declarations */ \ 
stmt1; \ 
stmt2; \
 /* ... */ \ 
 } while(0) /* (no trailing ; ) */ 

關鍵是要在每一個換行的時候加上一個"\" 。


#define的條件編譯

在大規模的開發過程中,特別是跨平臺和系統的軟件里,define最重要的功能是條件編譯
就是:
#ifdef XXX…(#else) … #endif

#ifdef DV22_AUX_INPUT 
#define AUX_MODE 3  
#else  
#define AUY_MODE 3 
#endif

可以在編譯的時候通過#define設置編譯環境

如何定義宏,取消宏

//定義宏  
#define [MacroName] [MacroValue] 
//取消宏  
#undef [MacroName] 
//普通宏 
#define PI (3.1415926) 
//帶參數的宏
#define max(a,b) ((a)>(b)? (a),(b))//這個要慎用

頭文件(.h)可以被頭文件或C文件包含

重復包含(重復定義) 由于頭文件包含可以嵌套,那么C文件就有可能包含多次同一個頭文件,就可能出現重復定義的問題的。 通過條件編譯開關來避免重復包含(重復定義) 例如

#ifndef __headerfileXXX__ 
#define __headerfileXXX__ 
…  
//文件內容 
… 
#endif
//#ifdef的使用和#if defined()的用法一致 
//#ifndef又和#if !defined()的用法一致。

重新定義一些類型,防止由于各種平臺和編譯器的不同,而產生的類型字節數差異,方便移植。

typedef  unsigned char      boolean;     /* Boolean value type. */ 
typedef  unsigned long int  uint32;      /* Unsigned 32 bit value */ 
typedef  unsigned short     uint16;      /* Unsigned 16 bit value */ 
typedef  unsigned char      uint8;       /* Unsigned 8  bit value */ 
typedef  signed long int    int32;       /* Signed 32 bit value */ 
typedef  signed short       int16;       /* Signed 16 bit value */ 
typedef  signed char        int8;        /* Signed 8  bit value */

參考百度文庫

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容