国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

詳解C語言中的#define宏定義命令用法

2020-01-26 14:36:15
字體:
來源:轉載
供稿:網友

#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 commentBMC 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,也就不會展開。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 陆良县| 长葛市| 遂平县| 翁源县| 南京市| 融水| 芜湖县| 庄浪县| 平塘县| 永修县| 札达县| 巍山| 灌云县| 怀安县| 襄汾县| 法库县| 公安县| 宜都市| 绥芬河市| 麻城市| 泰和县| 焦作市| 全椒县| 建昌县| 凤翔县| 庐江县| 广水市| 梧州市| 紫阳县| 萍乡市| 朝阳市| 青铜峡市| 大兴区| 荥阳市| 津南区| 太谷县| 赞皇县| 当阳市| 章丘市| 天门市| 都安|