预处理命令[#define]说明
宏定義
宏定義是對一些常見的變量、字符串等進行定義,被定義的數據在編譯會進行自動替換。有時一些變量或字符串被多次使用,當需要修改時,就需要對源文件中它們出現的地方一一修改,效率比較低,而通過宏定義,只需要對定義進行一次修改,就可以實現批量修改,提高效率,或者有時有些數字或字符需要多次輸入,而數字或字符又不是很規律時,輸入就會比較繁瑣且容易出錯。通過宏義將為輸入和維護帶來便利。
定義的格式
#define 標識符?字符串
其中的“#”表示這是一條預處理命令。凡是以“#”開頭的均為預處理命令。“define”為宏定義命令。“標識符”為所定義的宏名。“字符串”可以是常數、表達式、格式串等。
注意事項
1.宏定義只是一種簡單的代換,預處理程序對它不作任何檢查。只能在編譯已被宏展開后的源程序時發現錯誤。
2.宏定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起置換。
3.宏定義其作用域為宏定義命令起到源程序結束。如要終止其作用域可使用#undef命令。
使用實例
宏定義在處理有優先級順序的表達式時,應加括號,避免導致被宏展開后出現優先級錯誤。例如下面的代碼。
c語言允許宏帶有參數。在宏定義中的參數稱為形式參數,在宏調用中的參數稱為實際參數。對帶參數的宏,在調用中,不僅要宏展開,而且要用實參去代換形參。參見下面的代碼。
#define C(x) (3.14*X*2) c=C(5) //等價于 c=(3.14*5*2)/// #define S(x,y) ((x)*(y))
s=S(2+3,4+4)
//等價于 s=((2+3)*(4+4))
///
不可以對調用時會產生變化的變量、操作數或表達式等進行宏定義,如下代碼。
#define MIN(A,B) ((A)<(B)?(A):(B)) int a=1,b=5,min=0; min=MIN(a++,b);//宏展開后表達式為:max=((a++)< (b)?(a++):(b))
//返回值為min=3
///
條件編譯
在頭文件中通過使用#ifdef、#define和#endif的組合也可以進行條件編譯。條件編譯的目的是用以實現防止多個文件對此同一個頭文件的重復引用。常見的格式如下。
#ifndef <</SPAN>標識> #define <</SPAN>標識> ……… // include or define sth. #endif
?
轉載于:https://www.cnblogs.com/Mikhail/p/4379635.html
總結
以上是生活随笔為你收集整理的预处理命令[#define]说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7_oracle11g_64位连接
- 下一篇: HDU5196--DZY Loves I