欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言詳細(xì)分析宏定義的使用

 更新時間:2022年04月21日 11:01:28   作者:清風(fēng)自在 流水潺潺  
宏定義是用宏名來表示一個字符串,在宏展開時又以該字符串取代宏名,這只是一種簡單的替換。字符串中可以含任何字符,可以是常數(shù),也可以是表達(dá)式,預(yù)處理程序?qū)λ蛔魅魏螜z查,如有錯誤,只能在編譯已被宏展開后的源程序時發(fā)現(xiàn)

一、C語言中函數(shù)的“缺陷”

實參和形參之間僅僅是值傳遞,因此,函數(shù)中無法直接改變實參。

二、再次理解函數(shù)

函數(shù)是一種代碼復(fù)用的手段

  • 把實現(xiàn)某個功能的代碼片段進(jìn)行封裝(當(dāng)作一個整體)
  • 給這個代碼片段一個合適的名字(通過名字使用代碼)
  • 定義參數(shù)(定義代碼片段需要處理的問題)

三、C語言中的宏

  • 宏是C語言中代碼復(fù)用的補(bǔ)充方式
  • 宏定義語法:#define MACRO(param) code_segment
  • 宏使用語法: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ù)
  • 同一個函數(shù),無論調(diào)用多少次,都執(zhí)行相同的函數(shù)體代碼
  • 同一個宏,每次使用都會“復(fù)制粘貼”相同代碼

五、編譯器組成簡介

  • 預(yù)處理模塊:處理所有宏以及#開頭的語句(復(fù)制粘貼替換)
  • 編譯模塊:將C程序翻譯成二進(jìn)制程序
  • 鏈接模塊:將二進(jìn)制程序組合成可執(zhí)行程序

六、宏使用示例

用一個簡單的交換兩個數(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)識符替換為value
  • 因此,宏常量在本質(zhì)上與字面量相同(真正意義的常量)

八、小結(jié)

  • 宏是C語言中代碼復(fù)用的補(bǔ)充方式
  • 宏不是函數(shù),使用宏沒有函數(shù)調(diào)用的過程
  • 預(yù)處理模塊對宏的處理方式:復(fù)制粘貼替換
  • 程序中使用宏的地方最終被處理為對應(yīng)的代碼片段
  • 宏常量的本質(zhì)就是字面量

到此這篇關(guān)于C語言詳細(xì)分析宏定義的使用的文章就介紹到這了,更多相關(guān)C語言宏定義內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言基礎(chǔ)文件操作方式超全詳解建議收藏

    C語言基礎(chǔ)文件操作方式超全詳解建議收藏

    這篇文章主要為大家介紹了關(guān)于C語言文件操作方式的詳細(xì)總結(jié),建議收藏隨用隨看,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • C語言獲取Shell返回結(jié)果的實現(xiàn)方法

    C語言獲取Shell返回結(jié)果的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狢語言獲取Shell返回結(jié)果的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • C++實現(xiàn)LeetCode(10.正則表達(dá)式匹配)

    C++實現(xiàn)LeetCode(10.正則表達(dá)式匹配)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(10.正則表達(dá)式匹配),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)詳解

    C語言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)詳解

    對于數(shù)組想必大家都不陌生首先得要知道的是對于數(shù)組元素在內(nèi)存存儲是連續(xù)性的,下面這篇文章主要給大家介紹了關(guān)于C語言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • C++詳解實現(xiàn)Stack方法

    C++詳解實現(xiàn)Stack方法

    C++ Stack(堆棧)是一個容器類的改編,為程序員提供了堆棧的全部功能,也就是說實現(xiàn)了一個先進(jìn)后出(FILO)的數(shù)據(jù)結(jié)構(gòu)
    2022-06-06
  • C++?內(nèi)存泄漏調(diào)試方式

    C++?內(nèi)存泄漏調(diào)試方式

    這篇文章主要介紹了C++?內(nèi)存泄漏調(diào)試方式,C++和其他高級語言不同,需要自行管理內(nèi)存,項目大調(diào)用多,下文我們就來看看C++?內(nèi)存泄漏調(diào)試方式分享,需要的小伙伴可以參考一下
    2022-04-04
  • C++ SOCKET多線程實現(xiàn)聊天小程序

    C++ SOCKET多線程實現(xiàn)聊天小程序

    這篇文章主要為大家詳細(xì)介紹了C++ SOCKET多線程實現(xiàn)聊天小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++實現(xiàn)STL迭代器萃取的示例代碼

    C++實現(xiàn)STL迭代器萃取的示例代碼

    迭代器是一種抽象的設(shè)計概念,它提供了一種方法,使之能夠依序巡訪某個聚合物(容器)所含的各個元素,而又無需暴露該聚合物的內(nèi)部表述方式。本文主要介了STL迭代器萃取的方法,需要的可以參考一下
    2022-11-11
  • 詳解C語言實現(xiàn)空間索引四叉樹

    詳解C語言實現(xiàn)空間索引四叉樹

    本文主要介紹了用C語言實現(xiàn)四叉樹,對算法感興趣的同學(xué),可以參考下,并且試驗一下。
    2021-05-05
  • windows下用c++獲取本機(jī)ip地址的三種方法

    windows下用c++獲取本機(jī)ip地址的三種方法

    工作過程中遇到一個需求,需要獲取本機(jī)ip地址,同時獲取本機(jī)網(wǎng)絡(luò)連接情況,即網(wǎng)線是否連接,經(jīng)過多番搜索,本文給大家介紹了3種方案,通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11

最新評論