日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

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

作者:清風(fēng)自在?流水潺潺 ? 更新時間: 2022-06-19 編程語言

一、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ì)就是字面量

原文鏈接:https://blog.csdn.net/weixin_43129713/article/details/122501375

欄目分類
最近更新