C語(yǔ)言詳細(xì)分析宏定義的使用
一、C語(yǔ)言中函數(shù)的“缺陷”
實(shí)參和形參之間僅僅是值傳遞,因此,函數(shù)中無(wú)法直接改變實(shí)參。
二、再次理解函數(shù)
函數(shù)是一種代碼復(fù)用的手段
- 把實(shí)現(xiàn)某個(gè)功能的代碼片段進(jìn)行封裝(當(dāng)作一個(gè)整體)
- 給這個(gè)代碼片段一個(gè)合適的名字(通過名字使用代碼)
- 定義參數(shù)(定義代碼片段需要處理的問題)
三、C語(yǔ)言中的宏
- 宏是C語(yǔ)言中代碼復(fù)用的補(bǔ)充方式
- 宏定義語(yǔ)法:#define MACRO(param) code_segment
- 宏使用語(yǔ)法:MACRO(num);
例如:
#define ADD(a,b) a + b int main() { int z = ADD(1,2); printf("z = %d\n", z); return 0; }
四、宏與函數(shù)的不同
- 宏不是函數(shù),使用宏沒有函數(shù)調(diào)用的過程
- 函數(shù)調(diào)用先傳遞參數(shù)值,然后跳轉(zhuǎn)執(zhí)行函數(shù)體,最后返回
- 使用宏只是單純“代碼復(fù)制粘貼”,然后替換參數(shù)
- 同一個(gè)函數(shù),無(wú)論調(diào)用多少次,都執(zhí)行相同的函數(shù)體代碼
- 同一個(gè)宏,每次使用都會(huì)“復(fù)制粘貼”相同代碼
五、編譯器組成簡(jiǎn)介
- 預(yù)處理模塊:處理所有宏以及#開頭的語(yǔ)句(復(fù)制粘貼替換)
- 編譯模塊:將C程序翻譯成二進(jìn)制程序
- 鏈接模塊:將二進(jìn)制程序組合成可執(zhí)行程序
六、宏使用示例
用一個(gè)簡(jiǎn)單的交換兩個(gè)數(shù)的值作為例子:
#include <stdio.h> #define SWAP(a, b) {int t = a; a = b; b = t;} int main() { int x = 1; int y = 2; SWAP(x, y); // {int t = x; x = y; y = t;} printf("x = %d, y = %d\n", x, y); return 0; }
下面為輸出結(jié)果:
七、再論宏常量
#define NAME value
- 預(yù)處理模塊將代碼中出現(xiàn)的NAME標(biāo)識(shí)符替換為value
- 因此,宏常量在本質(zhì)上與字面量相同(真正意義的常量)
八、小結(jié)
- 宏是C語(yǔ)言中代碼復(fù)用的補(bǔ)充方式
- 宏不是函數(shù),使用宏沒有函數(shù)調(diào)用的過程
- 預(yù)處理模塊對(duì)宏的處理方式:復(fù)制粘貼替換
- 程序中使用宏的地方最終被處理為對(duì)應(yīng)的代碼片段
- 宏常量的本質(zhì)就是字面量
到此這篇關(guān)于C語(yǔ)言詳細(xì)分析宏定義的使用的文章就介紹到這了,更多相關(guān)C語(yǔ)言宏定義內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言獲取Shell返回結(jié)果的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇C語(yǔ)言獲取Shell返回結(jié)果的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2016-07-07C++實(shí)現(xiàn)LeetCode(10.正則表達(dá)式匹配)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(10.正則表達(dá)式匹配),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C語(yǔ)言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)詳解
對(duì)于數(shù)組想必大家都不陌生首先得要知道的是對(duì)于數(shù)組元素在內(nèi)存存儲(chǔ)是連續(xù)性的,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下2021-12-12C++ SOCKET多線程實(shí)現(xiàn)聊天小程序
這篇文章主要為大家詳細(xì)介紹了C++ SOCKET多線程實(shí)現(xiàn)聊天小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06