日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++编译预处理:宏定义指令、文件包含指令和条件编译指令

發(fā)布時(shí)間:2023/12/18 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++编译预处理:宏定义指令、文件包含指令和条件编译指令 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
 ◆ 不帶參數(shù)的宏定義:用來產(chǎn)生與一個(gè)字符串(即宏名)對(duì)應(yīng)的常量字符串,格式為:
?? #define 宏名 常量串

帶參數(shù)的宏定義:帶參宏定義的形式很象定義一個(gè)函數(shù),格式為:
?? #define 宏名(形參表) 表達(dá)式串

處理過程:編譯預(yù)處理后產(chǎn)生一個(gè)中間文件,文件中所有宏名(如果是帶參數(shù)的宏,則宏名包括參數(shù)表在內(nèi))均用其對(duì)應(yīng)的常量串或表達(dá)式串代替。替換過程稱為“宏替換”或“宏展開”。

舉例:
  • 使用指令:#define PI 3.1415926
    則程序中可以使用標(biāo)識(shí)符PI,編譯預(yù)處理后產(chǎn)生一個(gè)中間文件,文件中所有PI被替換3.1415926。
  • 使用指令:#define S(a,b) (a)*(b)/2
    則程序中可使用S(a,b),編譯預(yù)處理后產(chǎn)生中間文件,其中S(a,b)被替換成(a)*(b)/2。

幾點(diǎn)注意:
  • 宏替換只是字符串和標(biāo)識(shí)符之間的簡(jiǎn)單替換,預(yù)處理本身不做任何數(shù)據(jù)類型和合法性檢查,也不分配內(nèi)存單元。
  • 宏定義時(shí),形參通常要用括號(hào)括起來,否則容易導(dǎo)致邏輯錯(cuò)誤。例如,如果定義:
    ?? #define S(a,b) a*b/2
    那么程序中的S(3+5,4+2)就會(huì)被宏展開為3+5*4+2/2,不符合定義的真正的意圖。
  • 帶參宏定義形式上象定義函數(shù),但它與函數(shù)的本質(zhì)不同。宏定義只是產(chǎn)生字符串替代,不存在分配內(nèi)存和參數(shù)傳遞。

文件包含指令

文件包含用#include指令,預(yù)處理后將指令中指明的源程序文件嵌入到當(dāng)前源程序文件的指令位置處。有2種格式:
  • 第一種方式,格式為:
    ??#include< 文件名>
    預(yù)處理器將在include子目錄下搜索由文件名所指明的文件。這種方式稱為“標(biāo)準(zhǔn)方式”,適用于嵌入C++提供的頭文件,因?yàn)檫@些頭文件一般都存在C++系統(tǒng)目錄的include子目錄下。
  • 第二種方式,格式為:
    ??#include ″文件名″
    預(yù)處理器將首先在當(dāng)前文件所在目錄下搜索,如果找不到再按標(biāo)準(zhǔn)方式搜索。這種方式適用于嵌入用戶自己建立的頭文件。

一個(gè)被包含的頭文件中還可以有#include指令,即include指令可以嵌套。但是,如果同一個(gè)頭文件在同一個(gè)源程序文件中被重復(fù)包含,就會(huì)出現(xiàn)標(biāo)識(shí)符重復(fù)定義的錯(cuò)誤

例如:頭文件f2.h中包含了f1.h,如果文件f3.cpp中既包含f1.h,又包含f2.h,那么編譯將提示錯(cuò)誤,原因是f1.h被包含了兩次,那么其中定義的標(biāo)識(shí)符在f3.cpp中就被重復(fù)定義。

避免重復(fù)包含可以用“條件編譯”指令。

條件編譯指令

當(dāng)希望在不同條件下編譯程序的不同部分,這種情況就要使用“條件編譯”指令。

條件編譯指令包括:#if、#else、#ifdef、#ifndef、#endif、#undef等。可分為兩類:
  • 用宏名作為編譯的條件,格式為:
    ?? #ifdef<宏名>
    ??< 程序段1>
    ?? [#else
    ??< 程序段2>]
    ?? #endif
  • 用表達(dá)式的值作為編譯條件,格式為:
    ?? #if< 表達(dá)式>
    ??< 程序段1>
    ?? [#else
    ??< 程序段2>]
    ?? #endif

  • 其中,“程序段”可以是程序也可以是編譯預(yù)處理指令。

    實(shí)際中,在調(diào)試程序時(shí)常常要輸出調(diào)試信息,而調(diào)試完后不需要輸出這些信息,則可以把輸出調(diào)試信息的語句用條件編譯指令括起來,通過在該指令前面安排宏定義來控制編譯不同的程序段。形式如下:
    ??#ifdef DEBUG
    ?? cout<<″a=″<<a<<′\t′<<″x=″<<x<<endl;
    ?? #endif

    在程序調(diào)試期間,在該條件編譯指令前增加宏定義:
    ??#define DEBUG
    調(diào)試好后,刪除DEBUG宏定義,將源程序重新編譯一次。

    幾點(diǎn)說明:
    • #ifndef與#ifdef作用一樣,只是選擇的條件相反。
    • #undef指令用來取消#define指令所定義的符號(hào),這樣可以根據(jù)需要打開和關(guān)閉符號(hào)。?

    總結(jié)

    以上是生活随笔為你收集整理的C++编译预处理:宏定义指令、文件包含指令和条件编译指令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久久精品三级 | 性一交一乱一色一视频麻豆 | 欧美极品三级 | 俄罗斯porn| 欧美激情一区二区三级高清视频 | 免费网站观看www在线观看 | 成人国产精品蜜柚视频 | 欧美肥老妇| 东北少妇不带套对白 | 灌篮高手全国大赛电影 | 女裸全身无奶罩内裤内衣内裤 | 影音先锋在线中文字幕 | 国产女人在线 | h在线免费观看 | 国内精品久久久久久久久 | 亚洲精品伊人 | 超碰一区 | 中文字幕第十一页 | 日本不卡一区 | 国产大片黄 | 午夜精产品一区二区在线观看的 | 免费观看黄一级视频 | 在线观看国产成人 | 青青草这里只有精品 | 都市激情男人天堂 | 国产毛片久久久久 | 九九天堂网| 日本aⅴ在线观看 | xxxx69视频| 乌克兰极品av女神 | 人人爽人人做 | 最好看的日本字幕mv视频大全 | va视频在线 | 91狠狠干 | 美女喷液视频 | 狠狠v欧美v日韩v亚洲ⅴ | 国产20页 | 精品久久成人 | 中文字幕3 | av中文字幕在线播放 | 精品一区二区在线观看 | 久久久精品久久久 | 一区二区三区久久久 | 制服.丝袜.亚洲.中文.综合懂 | www.国产视频.com | 日韩中文第一页 | 三上悠亚 电影 | 三级色网 | 久久22| 中文字幕狠狠干 | 日本美女一级视频 | 亚洲国产精品成人综合色在线婷婷 | 色妞av | 久久免费在线视频 | 97在线视频人妻无码 | av.www| 日韩激情中文字幕 | 久久精品4| 毛茸茸亚洲孕妇孕交片 | 欧美xxxⅹ性欧美大片 | 国产黄色片av | 51 吃瓜网| 日韩在线视频免费 | 天堂亚洲精品 | 熟妇人妻久久中文字幕 | 成人网在线免费观看 | 求免费黄色网址 | 欧美理伦片在线播放 | 中文字幕 国产精品 | 91精品免费观看 | 波多野结衣精品在线 | av网址免费 | 欧美一区二区日韩一区二区 | 亚洲AV无码久久精品浪潮 | 日韩欧美高清在线 | 欧美精品久久久久久久久 | 国产亚洲欧美在线 | 理论片中文 | 日韩视频在线观看一区二区三区 | 国产欧美一区二区 | 天堂草在线观看 | 免费成人深夜夜行网站视频 | 三上悠亚在线一区二区 | 午夜免费福利网站 | 亚洲美女自拍偷拍 | 深夜老司机福利 | 夜夜操免费视频 | 狐狸视频污 | 欧美一级免费观看 | 成人午夜在线播放 | 综合视频在线 | 激情啪啪网 | 亚洲女优视频 | аⅴ天堂中文在线网 | 自拍偷拍麻豆 | 激情综合av| av在线第一页 | 国产欧美精品一区二区色综合朱莉 | 无码人妻一区二区三区一 |