簡(jiǎn)單講解C語(yǔ)言中宏的定義與使用
宏定義是預(yù)編譯功能的一種, 預(yù)編譯又稱為預(yù)處理, 是為編譯做的預(yù)備工作的階段。處理#開(kāi)頭的指令, 比如拷貝 #include 包含的文件代碼,#define宏定義的替換,條件編譯等。
使用宏定義的好處:使用宏定義的好處:可提高程序的通用性和易讀性,減少不一致性,減少輸入錯(cuò)誤和便于修改。例如 π 這個(gè)常量,我們有時(shí)候會(huì)在程序的多個(gè)地方使用,如果每次使用都重新定義,一來(lái)比較麻煩,二來(lái)容易出錯(cuò),所以我們可以把 π 做成宏定義來(lái)使用。
語(yǔ)法說(shuō)明:
(1)宏名一般用大寫
(2)使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯(cuò)誤和便于修改。例如:數(shù)組大小常用宏定義
(3)預(yù)處理是在編譯之前的處理,而編譯工作的任務(wù)之一就是語(yǔ)法檢查,預(yù)處理不做語(yǔ)法檢查。
(4)宏定義末尾不加分號(hào);
(5)宏定義寫在函數(shù)的花括號(hào)外邊,作用域?yàn)槠浜蟮某绦?,通常在文件的最開(kāi)頭。
(6)可以用#undef命令終止宏定義的作用域
(7)宏定義可以嵌套
(8)字符串" "中永遠(yuǎn)不包含宏
(9)宏定義不分配內(nèi)存,變量定義分配內(nèi)存。
定義:
#define 宏名 內(nèi)容 #define kArrLen 10 // OC駝峰命名法:首字符為k,其他單詞首字符大寫 #define ARR_LEN 10 // C語(yǔ)言中的宏命名規(guī)范:所有字母大寫,單詞用下劃線分隔
例如:
#define PI 3.1415926
我們就可以使用 PI 來(lái)代替 3.1415926 即可:
float r = 0.5; float area = PI * r * r; printf("area = %f\n", area);
在程序預(yù)編譯階段會(huì)把 PI 替換成 3.1415926:
float area = 3.1415926 * r * r;
宏定義內(nèi)容很簡(jiǎn)單,也很好理解,但是有幾個(gè)如下的注意事項(xiàng):
1、因?yàn)楹甓x只是簡(jiǎn)單的替換,如果宏定義的內(nèi)容有運(yùn)算的時(shí)候,要把每個(gè)變量加上括號(hào),以免影響運(yùn)算的優(yōu)先級(jí)
比如:#define MUL(A, B) (A * B)
使用方法:
MUL(3 + 5, 5 + 6) //會(huì)替換成 3 + 5 * 5 + 6 = 34
我們希望(3 + 5) * (5 + 6),所以定義宏定義的時(shí)候應(yīng)該:
#define MUL(A, B) ((A) * (B))
2、注意宏定義后面沒(méi)有分號(hào)(;),它不是一條語(yǔ)句
3、宏定義是在程序編譯前期進(jìn)行替換,此時(shí)程序還沒(méi)有編譯
相關(guān)文章
如何基于C語(yǔ)言socket編程實(shí)現(xiàn)TCP通信
本文介紹了如何基于C語(yǔ)言socket編程實(shí)現(xiàn)TCP通信,下面小編來(lái)簡(jiǎn)單介紹下2019-05-05生成隨機(jī)數(shù)rand函數(shù)的用法詳解
本篇文章是對(duì)生成隨機(jī)數(shù)rand函數(shù)的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C++中用substr()函數(shù)消除前后空格的解決方法詳解
本篇文章是對(duì)C++中用substr()函數(shù)消除前后空格的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05QT實(shí)現(xiàn)定時(shí)關(guān)閉消息提示框
這篇文章主要介紹了軟件利用Qt簡(jiǎn)單實(shí)現(xiàn)消息提示框可定時(shí)自動(dòng)關(guān)閉,文中的示例代碼講解詳細(xì),對(duì)我們;了解QT有一定的幫助,感興趣的可以學(xué)習(xí)一下2022-01-01C++實(shí)現(xiàn)兩個(gè)日期間差多少天的解決方法
本篇文章用實(shí)例說(shuō)明,在C++中實(shí)現(xiàn)兩個(gè)日期間差多少天的方法。需要的朋友參考下2013-05-05C語(yǔ)言實(shí)現(xiàn)員工工資管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)員工工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02學(xué)習(xí)C語(yǔ)言要掌握的幾個(gè)庫(kù)
本文給大家分享的是網(wǎng)友提出的學(xué)習(xí)C語(yǔ)言要掌握的幾個(gè)庫(kù),這里分享給大家,有需要的小伙伴可以參考下。2015-07-07