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

C語(yǔ)言#define定義宏的使用詳解

 更新時(shí)間:2022年10月28日 09:36:42   作者:小小涵兒  
#define?機(jī)制包括了一個(gè)規(guī)定,允許把參數(shù)替換到文本中,這種實(shí)現(xiàn)通常稱為宏(macro)或定義宏(define?macro)。本文就來(lái)和大家聊聊宏的使用,需要的可以參考一下

1.宏是什么

#define 機(jī)制包括了一個(gè)規(guī)定,允許把參數(shù)替換到文本中,這種實(shí)現(xiàn)通常稱為宏(macro)或定義宏(define macro)。

語(yǔ)法:

#define name( parament-list ) stuff

parament-list:是一個(gè)由逗號(hào)隔開(kāi)的符號(hào)表。

2.宏的用法

#define SUM(x,y) ((x)+(y))
int main()
{
    int a = 10;
    int b = 20;
    int ret = SUM(a, b);
    printf("%d\n", ret);
    return 0;
}

簡(jiǎn)要說(shuō)明:宏已經(jīng)被替換

分位三個(gè)階段:預(yù)編譯、編譯、匯編

3. 宏的注意事項(xiàng)

定義什么替換什么

來(lái)看這一例:

#define NUM(x,y) x+y
int main()
{
    int a = 2;
    int b = 3;
    printf("%d\n", NUM(a, b) * NUM(a, b));
    //結(jié)果:11
    return 0;
}

原因:num(a,b)*num(a,b) = a + b * a + b=11

4. 宏和函數(shù)的區(qū)別

屬性#define定義宏函數(shù)
代碼長(zhǎng)度如果多次調(diào)用,多次替換,如果是大長(zhǎng)度宏其長(zhǎng)度很長(zhǎng)函數(shù)只實(shí)現(xiàn)一次可以多次使用,如果多次調(diào)用,長(zhǎng)度只有一份
執(zhí)行速度更快函數(shù)調(diào)用和開(kāi)辟都會(huì)有額外開(kāi)銷
操作符優(yōu)先級(jí)必須每個(gè)參數(shù)加上括號(hào),否則操作符優(yōu)先級(jí)可能會(huì)產(chǎn)生不可預(yù)料的后果函數(shù)參數(shù)只在函數(shù)調(diào)用的時(shí)候求值一次,它的結(jié)果值傳遞給函數(shù)。表達(dá)式的求值結(jié)果更容易預(yù)測(cè)
帶有副作用參數(shù)多次調(diào)用宏會(huì)有不可預(yù)料的后果函數(shù)參數(shù)只在傳參的時(shí)候求值一次,結(jié)果更容易控制,只需關(guān)注是傳值還是傳址
參數(shù)類型宏的參數(shù)和類型無(wú)關(guān),可以使用與任何參數(shù)類型函數(shù)參數(shù)與類型有關(guān),類型取決于使用目的,傳值,傳址,還是拿一個(gè)字節(jié)數(shù)據(jù)char*
調(diào)試不方便調(diào)試,編譯期間就已經(jīng)替換可調(diào)試
遞歸不可遞歸可遞歸

宏帶副作用參數(shù):

#define MAX(a, b) ( (a) > (b) ? (a) : (b) )
int main()
{
    int x = 5;
    int y = 8;
    int z = MAX(x++, y++);
    printf("x=%d y=%d z=%d\n", x, y, z);//輸出的結(jié)果是什么
    return 0;
}
//( (x++) > (y++) ? (x++):(y++) )
//輸出結(jié)果:x=6,y=10,z=9

5.命名要求

宏名必須大寫(xiě)

函數(shù)不要全部大寫(xiě)

6. 條件編譯

常見(jiàn)條件編譯指令及應(yīng)用場(chǎng)景

1.單分支

編譯指令:

#if 常量表達(dá)式
? //…
#endif

應(yīng)用場(chǎng)景:

int main()
{
#if 4>2
    printf("hello world!\n");
#endif
    return 0;
}
//輸出hello world

2.多分支

編譯指令:

#if 常量表達(dá)式
? //…
#elif 常量表達(dá)式
? //…
#else
? //…
#endif

應(yīng)用場(chǎng)景:

int main()
{
#if 1>2
    printf("xixi\n");
#elif 4>3
    printf("haha\n");
#else 
    printf("heihei\n");
#endif
    return 0;
}
//輸出結(jié)果:haha

可不能和if else選擇語(yǔ)句混淆,多分支條件編譯從上往下走,如果有一個(gè)分支成立,后面分支就不再執(zhí)行;但是選擇語(yǔ)句是從上往下走,有一個(gè)分支成立,繼續(xù)查看后面分支是否成立

3.判斷是否被定義

編譯指令:

1. > #if defined(symbol) 或 #ifdef symbol

2. > #if !defined(symbol) 或 #ifndef symbol

應(yīng)用場(chǎng)景:

  ```c
  
  #define DEF    
  int main()
  {
  #if defined(DEF)
      printf("haha\n");
  #endif
  
  #ifdef MAX
      printf("heihei\n");
  #endif
      return 0;
  }
  //輸出結(jié)果:haha
  ```

4.嵌套指令

編譯指令

#if 常量表達(dá)式
#ifdef symbol
//操作
#endif
#elif 常量表達(dá)式
#ifdef symbol
//操作
#endif
#endif

條件編譯指令也支持嵌套,注意#endif結(jié)束本次嵌套

5.刪除宏定義

編譯指令:

#undef

應(yīng)用場(chǎng)景:

#define DEF
int main()
{
#undef DEF//刪除DEF宏定義了
#ifdef DEF
    printf("hehe\n");
#endif
    return 0;
} 

以上就是C語(yǔ)言#define定義宏的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言#define定義宏的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C/C++實(shí)現(xiàn)推箱子小游戲

    C/C++實(shí)現(xiàn)推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了C/C++實(shí)現(xiàn)推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Qt?5.9使用VTK顯示點(diǎn)云的詳解詳解

    Qt?5.9使用VTK顯示點(diǎn)云的詳解詳解

    這篇文章主要介紹了Qt?5.9使用VTK顯示點(diǎn)云,主要包括PCL安裝及在VS2013中使用PCL的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C++結(jié)構(gòu)體初始化的10種寫(xiě)法總結(jié)

    C++結(jié)構(gòu)體初始化的10種寫(xiě)法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了10種C++中結(jié)構(gòu)體初始化的寫(xiě)法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • C/C++中CONST用法總結(jié)(推薦)

    C/C++中CONST用法總結(jié)(推薦)

    這篇文章主要介紹了C/C++中CONST用法總結(jié)(推薦),包括const常量與define宏定義的區(qū)別介紹,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-07-07
  • opencv實(shí)現(xiàn)讀取視頻保存視頻

    opencv實(shí)現(xiàn)讀取視頻保存視頻

    這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)讀取視頻保存視頻,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++實(shí)現(xiàn)病人就醫(yī)管理系統(tǒng)

    C++實(shí)現(xiàn)病人就醫(yī)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++語(yǔ)言實(shí)現(xiàn)病人就醫(yī)管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C語(yǔ)言實(shí)現(xiàn)數(shù)獨(dú)輔助器(附源碼)

    C語(yǔ)言實(shí)現(xiàn)數(shù)獨(dú)輔助器(附源碼)

    數(shù)獨(dú)是源自瑞士的一種數(shù)學(xué)游戲。是一種運(yùn)用紙、筆進(jìn)行演算的邏輯游戲。本文將利用C語(yǔ)言制作一個(gè)數(shù)獨(dú)輔助器,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-01-01
  • 你知道C語(yǔ)言函數(shù)調(diào)用常用的2種方式嗎

    你知道C語(yǔ)言函數(shù)調(diào)用常用的2種方式嗎

    本篇博客會(huì)講解C語(yǔ)言函數(shù)調(diào)用的2種方式,分別是:傳值調(diào)用和傳址調(diào)用。這2種函數(shù)調(diào)用方式有什么區(qū)別呢?為什么會(huì)有不同的效果呢?分別有哪些用途呢?下面就來(lái)一一展開(kāi)
    2023-04-04
  • C語(yǔ)言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問(wèn)題解決

    C語(yǔ)言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問(wèn)題解決

    這篇文章主要介紹了C語(yǔ)言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問(wèn)題解決,文中的題目是將元素連接起來(lái)排成一個(gè)數(shù)并要求出這類結(jié)果中數(shù)最小的一個(gè),需要的朋友可以參考下
    2016-03-03
  • 解析C++中臨時(shí)對(duì)象的產(chǎn)生情況

    解析C++中臨時(shí)對(duì)象的產(chǎn)生情況

    臨時(shí)對(duì)象的產(chǎn)生和銷毀都是有成本的,都會(huì)影響程序的執(zhí)行性能和效率,所以如果能了解臨時(shí)對(duì)象產(chǎn)生的原因,就可以提升程序的性能和效率,下面小編就來(lái)和大家聊聊臨時(shí)對(duì)象產(chǎn)生的幾種情況吧
    2023-06-06

最新評(píng)論