C預(yù)處理器

C預(yù)處理器

C預(yù)處理器處理程序的源代碼,在編譯之前運行输虱,通常以符號#開頭,C語言的預(yù)處理主要有3個方面的內(nèi)容(下三)

1. 宏定義和宏替換 #define

"宏"是借用匯編語言中的概念壳快,為了是方便作一些定義和擴展

#define開頭燕侠,分為
  • (1) 符號常量的宏定義
  • (2) 帶參數(shù)的宏定義

1.1 符號常量的宏定義#define 標(biāo)識符 字符串
注:其中標(biāo)識符就是宏名稱,用來標(biāo)識常量字符串的救巷,另外宏定義末尾不加分號

由于預(yù)處理是在編譯之前壶熏,故預(yù)處理不做語法檢查
且宏定義不分配內(nèi)存,變量定義才會分配內(nèi)存

1.2 帶參數(shù)的宏定義及其替換#define 標(biāo)識符(參數(shù)表) 字符串
對帶參數(shù)的宏定義進行宏替換時浦译,不僅對宏標(biāo)識符作字符串替換棒假,還必須做參數(shù)的替換
例: 有宏定義 #define Func(x) (x*x),則 Fun(a+B)將會被替換成什么精盅?
答: 替換成 (a+B*a+B)
可見如果想實現(xiàn)(a+B)*(a+B)帽哑,則正確的宏定義應(yīng)該為:#define Func(r) ((r)*(r))

故:為了避免宏替換時發(fā)生錯誤,宏定義中的宏參數(shù)應(yīng)加上括號

宏定義可以嵌套使用:
例:
#define ADD(x, y) x+y
int m = 3;
m + = m * ADD(m, m);
m = ?
解析:

m + = m* ADD(m, m);
m = m + m * m + m = 3+ 3*3 +3 = 15

1.3 宏定義的本質(zhì)即文本替換:

關(guān)于宏定義和宏替換注意點
  • 宏名一名大寫(標(biāo)識符)叹俏;宏名與參數(shù)括號之間不能有空格妻枕,末尾無分號
  • 宏替換只做替換,不檢查語法粘驰,不做計算屡谐,不做表達式求解
  • 宏替換在編譯前進行,不分配內(nèi)存蝌数,函數(shù)調(diào)用在編譯后程序運行時進行愕掏,并分配內(nèi)存
  • 函數(shù)只有一個返回值,利用宏則可設(shè)法有多個值
  • 宏替換使源程序變長顶伞,函數(shù)調(diào)用不會
  • 宏替換不占運行時間饵撑,只占編譯時間,函數(shù)調(diào)用占運行時間

注: 應(yīng)盡量少用宏替換唆貌,在C++中滑潘,宏替換實現(xiàn)的常量功能由const,enum代替锨咙,帶參數(shù)的宏替換由模板內(nèi)聯(lián)函數(shù)代替

2. 文件包含 #include

#include <iostream>< >標(biāo)準(zhǔn)頭文件
#include "a.h"" "自定義頭文件

3. 條件編譯

作用:可使同一源程序根據(jù)不同編譯條件(參數(shù))產(chǎn)生不同的目標(biāo)代碼语卤,便于調(diào)試和移植

形式:(條件編譯控制語句有不同形式)

#if / ifdef / ifndef
#elif
#else
#endif

文件包含需避免多重包含,下面介紹利用條件編譯語句避免多重包含:

  • 1酪刀、為避免名字沖突粱侣,預(yù)處理器變量經(jīng)常用大寫字母表示
  • 2、預(yù)處理器變量有兩種狀態(tài):已定義和未定義
    #define指示一個名字并定義該名字為預(yù)處理器變量
    #ifndef檢測指定的預(yù)處理變量是否未定義蓖宦,如果預(yù)處理器變量未定義齐婴,那么跟在其后的所有語句都被處理,直到出現(xiàn)#endif

舉個格式例子
#ifndef SALESITEM_H
#define SALESITEM_H
// 此處是某個類的定義與相關(guān)函數(shù)定義
#endif

為了保證頭文件在給定的源文件中只處理一次稠茂,首先檢測#ifndef柠偶,若第一次處理,則#ifndef后面的語句執(zhí)行睬关,直到#endif诱担,那樣,已定義過后电爹,之后編譯時就會忽略蔫仙。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市丐箩,隨后出現(xiàn)的幾起案子摇邦,更是在濱河造成了極大的恐慌恤煞,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件施籍,死亡現(xiàn)場離奇詭異居扒,居然都是意外死亡,警方通過查閱死者的電腦和手機丑慎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門喜喂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竿裂,你說我怎么就攤上這事玉吁。” “怎么了腻异?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵进副,是天一觀的道長。 經(jīng)常有香客問我捂掰,道長敢会,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任这嚣,我火速辦了婚禮鸥昏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姐帚。我一直安慰自己吏垮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布罐旗。 她就那樣靜靜地躺著膳汪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪九秀。 梳的紋絲不亂的頭發(fā)上遗嗽,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音鼓蜒,去河邊找鬼痹换。 笑死,一個胖子當(dāng)著我的面吹牛都弹,可吹牛的內(nèi)容都是我干的娇豫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼畅厢,長吁一口氣:“原來是場噩夢啊……” “哼冯痢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤浦楣,失蹤者是張志新(化名)和其女友劉穎袖肥,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椒振,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡昭伸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年梧乘,在試婚紗的時候發(fā)現(xiàn)自己被綠了澎迎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡选调,死狀恐怖夹供,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仁堪,我是刑警寧澤哮洽,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站弦聂,受9級特大地震影響鸟辅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜莺葫,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一匪凉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捺檬,春花似錦再层、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至烤镐,卻和暖如春蛋济,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炮叶。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工碗旅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悴灵。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓扛芽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親积瞒。 傳聞我的和親對象是個殘疾皇子川尖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 目錄 一.預(yù)處理的工作方式... 3 1.1.預(yù)處理的功能... 3 1.2預(yù)處理的工作方式... 3 二.預(yù)處理...
    朱森閱讀 1,358評論 0 2
  • 預(yù)處理器是一些指令,指示編譯器在實際編譯之前所需完成的預(yù)處理茫孔。 所有的預(yù)處理器指令都是以井號(#)開頭叮喳,只有空格字...
    資深小夏閱讀 165評論 0 2
  • C/C++編譯系統(tǒng)編譯程序的過程為預(yù)處理被芳、編譯、鏈接馍悟。預(yù)處理器是在程序源文件被編譯之前根據(jù)預(yù)處理指令對程序源文件進...
    小碼兔的日常閱讀 867評論 0 1
  • 吭哧吭哧聲驚醒了夢中的我畔濒,以為我家貓咪又在“破壞”東西,拉開燈瞧見小貓咪還在入睡锣咒。此時我全沒了睡意侵状,不知該出不出臥...
    凌雪憶梅閱讀 316評論 3 0
  • 身為一名女性,打從第一次知道“月經(jīng)”毅整,并被一種來自腹部的深切疼痛包裹起來的時候趣兄,我那還未完整的人生觀險些崩塌掉。 ...
    九月星辰閱讀 323評論 0 0