詳解C說話中的#define宏界說敕令用法。本站提示廣大學習愛好者:(詳解C說話中的#define宏界說敕令用法)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C說話中的#define宏界說敕令用法正文
#define
敕令#define界說了一個標識符及一個串。在源法式中每次碰到該標識符時,均以界說的串代換它。ANSI尺度將標識符界說為宏名,將調換進程稱為宏調換。敕令的普通情勢為:
#define identifier string
留意:
1.該語句沒有分號。在標識符和串之間可以有隨意率性個空格,串一旦開端,僅由一新行停止。
2.宏名界說後,便可成為其它宏名界說中的一部門。
3.宏調換僅僅是以文本串取代宏標識符,條件是宏標識符必需自力的辨認出來,不然不停止調換。例如:
#define XYZ this is a tes
應用宏printf("XYZ");//該段不打印"this is a test"而打印"XYZ"。由於預編譯器辨認出的是"XYZ"
4.假如串擅長一行,可以在該行末尾用一反斜槓' \'續行。
#defineLONG_STRING"this is a very long\
string that is used as an example"
5.C說話法式廣泛應用年夜寫字母界說標識符。
6.用宏代換取代其實的函數的一年夜利益是宏調換增長了代碼的速度,由於不存在函數挪用的開支。但增長速度也有價值:因為反復編碼而增長了法式長度。
宏界說的留意事項
試圖應用宏去界說正文符號是不可的,例如以下代碼:
#define BSC // #define BMC /* #define EMC */ BSC my single-line comment BMC my multi-line comment EMC
由於正文先於預處置指令處置,當睜開這些宏界說的時刻天然會湧現一堆毛病。
宏界說表達式的時刻必定不克不及小氣括號。這個不消說明了。
宏界說的時刻宏名中最好不要有空格。上面的界說會帶來許多費事:
#define SUM (x) ((x)*(x))
一旦應用了#undef撤消宏,則前面的代碼都不克不及應用這個宏,除非再次界說。另外,假如沒有#undef的情況下就直接再次界說,後來的界說會籠罩失落後面的界說。上面代碼中的c值是4:
#include <stdio.h> #define X 3 #define Y X*2 #undef X #define X 2 int c = Y; int main(int argc, char** argv){ printf("%d",c) ; return 0; }
宏僅在應用的時刻睜開,不然即便界說有成績,也不會編譯失足。假如把下面代碼中的第二個#define正文失落,並把C的值賦值為0,即撤消了X界說,也不會報錯,由於沒有應用Y,也就不會睜開。