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

C語(yǔ)言宏定義容易認(rèn)不清的盲區(qū)梳理

 更新時(shí)間:2022年09月20日 09:24:00   作者:編程小魚六六六  
宏定義是C提供的三種預(yù)處理(宏定義、文件包含、條件編譯)的其中一種,其主要目的是為程序員在編程時(shí)提供一定的方便,并能在一定程度上提高程序的運(yùn)行效率

1、概念

#define命令是C語(yǔ)言中的一個(gè)宏定義命令,它用來將一個(gè)標(biāo)識(shí)符定義為一個(gè)字符串,該標(biāo)識(shí)符被稱為宏名,被定義的字符串稱為替換文本。

命令有兩種格式:一種是簡(jiǎn)單的宏定義,另一種是帶參數(shù)的宏定義。

(1)簡(jiǎn)單的宏定義:

#define<宏名> <字符串>

#defineVALUE((sizeof(a))/sizeof(a[0]))

(2) 帶參數(shù)的宏定義

#define<宏名> (<參數(shù)表>)<宏體>

#defineMAX(a,b)((a)>(b)?(a):(b))

2、不能忽略宏定義中的空格

下面的宏定義中f是否帶了參數(shù)呢?

#definef(x)((x)+1)

答案是否定的,在f與(x)之間存在一個(gè)空格,導(dǎo)致變成了如下定義。

#define f (x)((x)+1)

預(yù)處理程序?qū)λ蛔魅魏螜z查。如有錯(cuò)誤,只能在編譯已被宏展開后的源程序時(shí)發(fā)現(xiàn)。

3、宏不是函數(shù)

如果我們定義一個(gè)宏:

#defineMAX(a,b)a>b?a:b

當(dāng)我們執(zhí)行一個(gè)語(yǔ)句:

3+MAX(1,3);

我們期望的答案應(yīng)該是6才對(duì),其實(shí)呢,運(yùn)行之后的答案1。與宏定義相掛鉤的就是優(yōu)先級(jí),算數(shù)運(yùn)算符的優(yōu)先級(jí)高于條件運(yùn)算符,展開如下。

3+1>3?1:3,首先進(jìn)行算符運(yùn)算符的運(yùn)算,即4>3?1:3,所以答案為1。

請(qǐng)注意宏定義中的括號(hào),這些括號(hào)的作用就是預(yù)防引起優(yōu)先級(jí)相關(guān)的問題。有些專家建議在C語(yǔ)言中只要牢記兩個(gè)優(yōu)先級(jí)就夠了,乘除法優(yōu)先級(jí)高于加減法,在設(shè)計(jì)其它操作符時(shí),一律加上括號(hào)。

4、宏定義不是說明或語(yǔ)句

在行末不必加分號(hào),如加上分號(hào)則連分號(hào)也一起置換

5、宏不是類型定義

首先定義一個(gè)宏

#definepCharchar*

再用pChar 定義兩個(gè)變量,之后用操作符sizeof讀取變量所占用內(nèi)存大小,如果是指針類型的就占4個(gè)字節(jié),如果是字符型的就占1個(gè)字節(jié)。

結(jié)果占用空間不一樣,變量類型自然不一樣,所以宏定義不是類型定義。那如果我換成typedef來定義類型呢?

宏定義只是簡(jiǎn)單的字符串代換,是在預(yù)處理完成的,而typedef是在編譯時(shí)處理的,它不是作簡(jiǎn)單的代換,而是對(duì)類型說明符重新命名。被命名的標(biāo)識(shí)符具有類型定義說明。

6、與之相關(guān)的宏定義

編寫程序過程中,很多都需要條件編譯,來看一個(gè)常用的使用方法。

#if defined(CREDIT)
    credit();
#elif defined(DEBIT)
    debit();
#else
    printerror();
#endif

7、總結(jié)

宏的本質(zhì)是代碼替換。

到此這篇關(guān)于C語(yǔ)言宏定義容易認(rèn)不清的盲區(qū)梳理的文章就介紹到這了,更多相關(guān)C語(yǔ)言宏定義內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言指針基礎(chǔ)詳解

    C語(yǔ)言指針基礎(chǔ)詳解

    這篇文章主要介紹了C語(yǔ)言指針的基礎(chǔ),主要對(duì)C語(yǔ)言中指針的本質(zhì)及常見用法做了較為通俗易懂的分析,是后續(xù)深入學(xué)習(xí)C語(yǔ)言的基礎(chǔ),需要的朋友可以參考下
    2021-10-10
  • 最大子矩陣問題實(shí)例解析

    最大子矩陣問題實(shí)例解析

    這篇文章主要介紹了最大子矩陣問題實(shí)例解析,分別列舉了Java和C語(yǔ)言的相關(guān)實(shí)現(xiàn),需要的朋友可以參考下
    2015-08-08
  • 徹底掌握C語(yǔ)言strcat函數(shù)的用法

    徹底掌握C語(yǔ)言strcat函數(shù)的用法

    strcat是用來拼接字符串的,它會(huì)將參數(shù)?src?字符串復(fù)制到參數(shù)?dest?所指的字符串尾部,本章帶你了解它的使用并模擬實(shí)現(xiàn)它
    2022-05-05
  • pthread_cond_wait() 用法深入分析

    pthread_cond_wait() 用法深入分析

    以下是對(duì)pthread_cond_wait的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • C++實(shí)現(xiàn)Date類各種運(yùn)算符重載的示例代碼

    C++實(shí)現(xiàn)Date類各種運(yùn)算符重載的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)Date類各種運(yùn)算符重載的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • C語(yǔ)言自定義實(shí)現(xiàn)strlen函數(shù)的3種方法總結(jié)

    C語(yǔ)言自定義實(shí)現(xiàn)strlen函數(shù)的3種方法總結(jié)

    這篇文章帶大家了解C語(yǔ)言中自定義實(shí)現(xiàn)strlen函數(shù)的3種方法,計(jì)數(shù)器,遞歸以及指針,這三種方法通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 基于QT實(shí)現(xiàn)本地音樂播放器

    基于QT實(shí)現(xiàn)本地音樂播放器

    這篇文章主要為大家詳細(xì)介紹了如何基于QT實(shí)現(xiàn)簡(jiǎn)單的本地音樂播放器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • C++中文件操作基礎(chǔ)詳解

    C++中文件操作基礎(chǔ)詳解

    這篇文章主要為大家詳細(xì)介紹了C++中的一些文件操作基礎(chǔ)詳解,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++有一定幫助,需要的可以參考一下
    2022-06-06
  • C++學(xué)習(xí)之智能指針中的unique_ptr與shared_ptr

    C++學(xué)習(xí)之智能指針中的unique_ptr與shared_ptr

    吃獨(dú)食的unique_ptr與樂于分享的shared_ptr是C++中常見的兩個(gè)智能指針,本文主要為大家介紹了這兩個(gè)指針的使用以及智能指針使用的原因,希望對(duì)大家有所幫助
    2023-05-05
  • QT編寫tcp通信工具(Server端)

    QT編寫tcp通信工具(Server端)

    這篇文章主要為大家詳細(xì)介紹了QT編寫tcp通信工具,一個(gè)類似網(wǎng)上常見的網(wǎng)絡(luò)調(diào)試工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評(píng)論

抚松县| 阳曲县| 内江市| 德州市| 甘孜县| 桓台县| 嵊泗县| 保定市| 苍梧县| 夏河县| 娱乐| 大足县| 崇明县| 遂溪县| 都安| 太湖县| 寿宁县| 张家界市| 武邑县| 鄂托克前旗| 遵化市| 乌兰浩特市| 方城县| 漠河县| 长乐市| 石门县| 梅州市| 周口市| 商都县| 平罗县| 内江市| 鹰潭市| 炉霍县| 庐江县| 体育| 巫山县| 灵川县| 涿鹿县| 思茅市| 东辽县| 资中县|