最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++宏替換實(shí)現(xiàn)詳解

 更新時(shí)間:2020年11月19日 11:35:55   作者:fater  
這篇文章主要介紹了C/C++宏替換實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

基本形式

#define name replacement_text

通常情況下,#define 指令占一行,替換文本是 define 指令行尾部的所有剩余部分,但也可以把一個(gè)較長(zhǎng)的宏定義分成若干行,這時(shí)需要在待續(xù)的行末尾加上一個(gè)反斜杠符 ``。

宏定義也可以帶參數(shù),這樣可以對(duì)不同的宏調(diào)用使用不同的替換文本。例:

#define max(A, B) ((A) > (B) ? (A) : (B))

宏展開(kāi)中的陷阱

仔細(xì)考慮一下 max 的展開(kāi)式,其中的表達(dá)式會(huì)被計(jì)算兩次,因此如果表達(dá)式中包含自增運(yùn)算符或輸入/輸出等行為,則會(huì)出現(xiàn)不正確的情況,例如上述的宏 max:

max(i++, j++) // wrong

另外還需要注意,適當(dāng)使用圓括號(hào)以保證計(jì)算次序的正確性,例如:

#define square(x) x * x // wrong

當(dāng)用 square(z+1) 調(diào)用該宏定義時(shí)會(huì)出錯(cuò)。

#undef

在頭文件 <stdio.h> 中,getchar 與 putchar 函數(shù)在實(shí)際中常常被定義為宏,這樣可以避免處理字符時(shí)調(diào)用函數(shù)所需的運(yùn)行時(shí)開(kāi)銷(xiāo)。<ctype.h> 頭文件中定義的函數(shù)也常常是通過(guò)宏實(shí)現(xiàn)的。

可以通過(guò) #define 取消名字的宏定義,這樣做可以保證后續(xù)的調(diào)用是函數(shù)調(diào)用,而不是宏調(diào)用:

#undef getchar

int getchar(void) { ... } 

宏參數(shù)、# 和 ##

如果在宏定義的替換文本中,參數(shù)名以 # 作為前綴則結(jié)果將被擴(kuò)展為由實(shí)際參數(shù)替換該參數(shù)的帶引號(hào)的字符串。例如,可以將它與字符串連接運(yùn)算結(jié)合起來(lái)編寫(xiě)一個(gè)調(diào)試打印宏:

#define dprint(expr) printf(#expr " = %gn", expr)

使用語(yǔ)句

dprint(x/y);

調(diào)用該宏時(shí),該宏將被擴(kuò)展為:

printf("x/y" " = %gn", x/y);

其中的字符串被拼接起來(lái)了,這樣,該宏調(diào)用的效果等價(jià)于

printf("x/y = %gn", x/y);

預(yù)處理器運(yùn)算符 ## 為宏擴(kuò)展提供了一種連接實(shí)際參數(shù)的手段。如果替換文本中的參數(shù)與 ## 相鄰,則該參數(shù)將被實(shí)際參數(shù)替代,## 與前后的空白符將被刪除,并對(duì)替換后的結(jié)果重新掃描。例如,下面定義的宏 paste 用于連接兩個(gè)參數(shù):

#define paste(front, back) front ## back

因此,宏調(diào)用 paste(name, 1) 的結(jié)果將建立記號(hào) name1。

參考文獻(xiàn):

Brian W. Kernighan, Dennis M. Ritchie.The C Programming Language (Second Edition)[M].機(jī)械工業(yè)出版社:北京,2004:76-77.

到此這篇關(guān)于C/C++宏替換實(shí)現(xiàn)詳解的文章就介紹到這了,更多相關(guān)C/C++宏替換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ lambda閉包消除類(lèi)成員變量的解決思路

    C++ lambda閉包消除類(lèi)成員變量的解決思路

    在面向?qū)ο缶幊讨?類(lèi)成員變量過(guò)多可能會(huì)造成干擾,可以采用函數(shù)式編程的思想,通過(guò)閉包和lambda表達(dá)式減少不必要的類(lèi)成員,增強(qiáng)代碼的可控性和減少干擾,注意要正確使用mutable修飾符和值捕獲,以及合理安排lambda的初始化時(shí)機(jī),感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • C語(yǔ)言之沒(méi)有main函數(shù)的helloworld示例

    C語(yǔ)言之沒(méi)有main函數(shù)的helloworld示例

    這篇文章主要介紹了C語(yǔ)言之沒(méi)有main函數(shù)的helloworld示例,本文分解了帶main函數(shù)的helloworld示例,從而分析出不需要main函數(shù)的helloworld示例,需要的朋友可以參考下
    2015-03-03
  • C++中LibCurl庫(kù)的使用教程分享

    C++中LibCurl庫(kù)的使用教程分享

    LibCurl是一個(gè)開(kāi)源的免費(fèi)的多協(xié)議數(shù)據(jù)傳輸開(kāi)源庫(kù),該框架具備跨平臺(tái)性,開(kāi)源免費(fèi),這篇文章主要為大家介紹了如何在C++中使用LibCurl庫(kù),需要的可以參考下
    2023-08-08
  • C語(yǔ)言實(shí)現(xiàn)投票系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)投票系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)投票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Visual Studio Code配置C、C++環(huán)境并編寫(xiě)運(yùn)行的方法

    Visual Studio Code配置C、C++環(huán)境并編寫(xiě)運(yùn)行的方法

    這篇文章主要介紹了Visual Studio Code配置C、C++環(huán)境并編寫(xiě)運(yùn)行的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 用C語(yǔ)言實(shí)現(xiàn)排雷游戲

    用C語(yǔ)言實(shí)現(xiàn)排雷游戲

    大家好,本篇文章主要講的是用C語(yǔ)言實(shí)現(xiàn)排雷游戲,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C語(yǔ)言學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì)

    C語(yǔ)言學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì)

    這篇文章主要介紹了C語(yǔ)言學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • c++使用Easyx圖形庫(kù)實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    c++使用Easyx圖形庫(kù)實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    本文詳細(xì)講解了c++使用Easyx圖形庫(kù)實(shí)現(xiàn)飛機(jī)大戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • C++實(shí)現(xiàn)AVL樹(shù)的基本操作指南

    C++實(shí)現(xiàn)AVL樹(shù)的基本操作指南

    AVL樹(shù)是高度平衡的而二叉樹(shù),它的特點(diǎn)是AVL樹(shù)中任何節(jié)點(diǎn)的兩個(gè)子樹(shù)的高度最大差別為1,下面這篇文章主要給大家介紹了關(guān)于C++實(shí)現(xiàn)AVL樹(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • C++實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)化為后綴表達(dá)式詳解

    C++實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)化為后綴表達(dá)式詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用C++解決實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)換為后綴表達(dá)式的問(wèn)題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論

孟津县| 和政县| 通河县| 阳朔县| 阜阳市| 高尔夫| 西乌珠穆沁旗| 富锦市| 阿尔山市| 青岛市| 怀化市| 吉林市| 松溪县| 龙海市| 武平县| 顺义区| 阜康市| 夏河县| 东乡县| 敦化市| 阿城市| 信宜市| 宁化县| 通州区| 横峰县| 乡城县| 三河市| 聂拉木县| 会理县| 宜兴市| 旬阳县| 龙南县| 丁青县| 闸北区| 礼泉县| 玉田县| 内江市| 神木县| 陈巴尔虎旗| 靖安县| 竹山县|