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

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

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

1、概念

#define命令是C語言中的一個宏定義命令,它用來將一個標識符定義為一個字符串,該標識符被稱為宏名,被定義的字符串稱為替換文本。

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

(1)簡單的宏定義:

#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)之間存在一個空格,導致變成了如下定義。

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

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

3、宏不是函數(shù)

如果我們定義一個宏:

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

當我們執(zhí)行一個語句:

3+MAX(1,3);

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

3+1>3?1:3,首先進行算符運算符的運算,即4>3?1:3,所以答案為1。

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

4、宏定義不是說明或語句

在行末不必加分號,如加上分號則連分號也一起置換

5、宏不是類型定義

首先定義一個宏

#definepCharchar*

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

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

宏定義只是簡單的字符串代換,是在預處理完成的,而typedef是在編譯時處理的,它不是作簡單的代換,而是對類型說明符重新命名。被命名的標識符具有類型定義說明。

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

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

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

7、總結(jié)

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

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

相關(guān)文章

  • C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與)

    C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • QT實現(xiàn)按鈕開關(guān)Form窗體的效果的示例代碼

    QT實現(xiàn)按鈕開關(guān)Form窗體的效果的示例代碼

    本文主要介紹了QT實現(xiàn)按鈕開關(guān)Form窗體的效果的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • C++ 實現(xiàn)靜態(tài)單鏈表的實例

    C++ 實現(xiàn)靜態(tài)單鏈表的實例

    這篇文章主要介紹了C++ 實現(xiàn)靜態(tài)單鏈表的實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 詳解C++中變量的初始化規(guī)則

    詳解C++中變量的初始化規(guī)則

    這篇文章詳細介紹了關(guān)于C++中變量的初始化規(guī)則,C++如果不對變量初始化,可能會導致很多后果,所以學習C++變量初始化規(guī)則就很重要了,下面一起來看看
    2016-08-08
  • 簡要介紹C++編程中的友元函數(shù)和友元類

    簡要介紹C++編程中的友元函數(shù)和友元類

    這篇文章主要介紹了C++編程中的友元函數(shù)和友元類,屬于較為冷僻的知識,在實際開發(fā)中較少使用,需要的朋友可以參考下
    2015-09-09
  • C++ Easylogging++日志庫配置使用超詳細講解

    C++ Easylogging++日志庫配置使用超詳細講解

    這篇文章主要介紹了C++ Easylogging++日志庫配置使用,Easylogging++是用于C++應用程序的單頭高效日志庫。它非常強大,高度可擴展并且可以根據(jù)用戶的要求進行配置
    2022-11-11
  • 一文搞懂C++中的四種強制類型轉(zhuǎn)換

    一文搞懂C++中的四種強制類型轉(zhuǎn)換

    很多朋友向小編了解C語言中怎么進行強制類型轉(zhuǎn)換呢?在這小編告訴大家強制類型轉(zhuǎn)換可以分為兩種,一種是隱式類型轉(zhuǎn)換一種是顯示類型轉(zhuǎn)換,下面通過示例代碼給大家介紹下,需要的朋友參考下吧
    2021-07-07
  • 基于C++實現(xiàn)信息管理系統(tǒng)

    基于C++實現(xiàn)信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了基于C++實現(xiàn)信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 基于C++自制屠夫躲貓貓小游戲

    基于C++自制屠夫躲貓貓小游戲

    這篇文章主要為大家詳細介紹了如何基于C++自制屠夫躲貓貓小游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • Qt中QtWebEngine加載本地網(wǎng)頁跨域問題的總結(jié)

    Qt中QtWebEngine加載本地網(wǎng)頁跨域問題的總結(jié)

    本文主要介紹了Qt中QtWebEngine加載本地網(wǎng)頁跨域問題的總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04

最新評論