丰满人妻熟妇乱又伦精品,最新国产精品精品视频 视频,天堂а√中文最新版在线,成年网站未满十八禁

您現(xiàn)在的位置:首頁(yè) > 資訊 > 特別關(guān)注 > 正文

焦點(diǎn)快報(bào)!預(yù)處理指令用法詳解(C語(yǔ)言)

時(shí)間:2023-02-15 12:11:04    來(lái)源:騰訊云    

前言

使編譯器執(zhí)行預(yù)處理操作的代碼被稱為預(yù)處理指令,本文介紹常見(jiàn)的預(yù)處理指令的實(shí)際用法。

一、預(yù)處理符號(hào)

預(yù)處理符號(hào)是C語(yǔ)言內(nèi)置的符號(hào),是可以直接使用的。

#

其中,若遵頊ANSI C,則__STDC__為1,否則未定義。


(資料圖片)

二、#define

1)定義標(biāo)識(shí)符

#define可以用來(lái)定義標(biāo)識(shí)符,其語(yǔ)法為:#define name stuff,經(jīng)過(guò)預(yù)處理后,stuff會(huì)被直接替換為·name。

stuff的內(nèi)若過(guò)長(zhǎng),可在句末加上\續(xù)行符號(hào),像這樣:

#include#define Piccaso "Pablo,Diego,José\Francisco,de,Paula,Juan,Nepomuceno\,María,de,los,Remedios,Cipriano,de\,la,Santísima,Trinidad,Ruiz,y,Picasso"int main(){printf("%s", Piccaso);return 0;}
#

示例1:數(shù)值替換

#
int main(){int a = 100;return 0;}

示例2:循環(huán)替換

#
#includeint main(){while(1){printf("A");}return 0;}

運(yùn)行代碼,將會(huì)在屏幕上死循環(huán)地打印A

示例3:分支替換

#
int main(){int input = 0;switch (input){case 1:break; case 2:break; case 3:}return 0;}

2)宏定義

#define允許有參數(shù)的文本替換,這種操作通常稱為宏,其語(yǔ)法為:#define name(list) stuff,其中,list是由逗號(hào)隔開的符號(hào)表,符號(hào)有可能出現(xiàn)在stuff中。

示例1:

#
int main(){printf("%d", 5+5);return 0;}

示例2:

#
int main(){printf("%d", 10*double(5+1));return 0;}

因?yàn)?code>#define的功能只是替換,若要利用宏定義實(shí)現(xiàn)快捷的函數(shù)操作,最好的方法是在宏定義時(shí)多加括號(hào),以便于達(dá)到整體求值的效果,像這樣:#define double(x) (x)+(x)。

注意:由于宏是直接替換,因此傳參時(shí)嚴(yán)禁使用自增,自減,傳參時(shí)使用,替換后依然會(huì)再次執(zhí)行,會(huì)導(dǎo)致不可預(yù)測(cè)的后果。

3)字符串轉(zhuǎn)換符

字符串有自動(dòng)連接的特點(diǎn),例如運(yùn)行以下這段代碼:

#includeint main(){printf("123" "456");return 0;}

效果圖:

#

字符串轉(zhuǎn)換符#就是利用這個(gè)特性,它可以將宏定義中傳入的參數(shù),替換為字符串格式。

#include#define sum(x) printf("the val of "#x" is %d",x)int main(){int a = 10;sum(a);return 0;}

在上述代碼中,#號(hào)a直接轉(zhuǎn)化為字符串,隨后三個(gè)字符串拼接在一起。

效果圖:

#

利用該方法可以只傳參一次實(shí)現(xiàn)值和名同時(shí)打印。

4)片段鏈接符

在宏定義時(shí),片段連接符##可以實(shí)現(xiàn)將兩個(gè)符號(hào)連接在一起,使其成為一個(gè)符號(hào),前提是這個(gè)合成的符號(hào)必須已經(jīng)被定義。

#include#define double(x) sum##x*=2int main(){int sum1 = 1;int sum2 = 1;int sum3 = 1;double(1);printf("%d %d %d", sum1, sum2, sum3);return 0;}

在上述代碼中,##會(huì)把sum和參數(shù)x連接在一起,當(dāng)我們傳入1經(jīng)過(guò)預(yù)處理后,等效于:sum1*=2。

效果圖:

#

5)宏定義VS函數(shù)

宏定義的優(yōu)勢(shì):

宏定義的執(zhí)行速度遠(yuǎn)遠(yuǎn)超過(guò)函數(shù),當(dāng)執(zhí)行簡(jiǎn)單的計(jì)算時(shí),更適合使用宏定義。宏定義傳參時(shí)沒(méi)有類型檢測(cè),可以將任意的數(shù)據(jù)傳入。宏定義是直接替換,可以傳入各種各樣的符號(hào),實(shí)現(xiàn)許許多多函數(shù)做不到的功能。(可以傳入類型、傳入函數(shù)、傳入語(yǔ)句等等

宏定義的劣勢(shì):

宏定義不能調(diào)試、不能遞歸,因此宏定義只適合做簡(jiǎn)單的計(jì)算。宏定義是直接替換,因此相鄰操作符的優(yōu)先級(jí)很有可能產(chǎn)生不期望的順序,因此要盡可能帶括號(hào)。宏定義傳參沒(méi)有類型檢測(cè),因此不夠嚴(yán)謹(jǐn)。

6)命名公約

以下幾條公約,必須遵守

宏定義的名必須全部大寫。函數(shù)名不可以全部大寫。三、#undef#undef宏定義刪除,可以在函數(shù)內(nèi)部使用!
#

被刪除后的標(biāo)識(shí)就不能再使用了。

四、命令行編譯

指在VScodeLinux等用命令行執(zhí)行編譯的環(huán)境下,可以在編譯時(shí)對(duì)變量進(jìn)行賦值。

五、條件編譯

在寫程序時(shí),有些代碼是為了查看某個(gè)部分是否正確而寫的的調(diào)試代碼。

刪除很可惜,但又不想讓其編譯,此時(shí)就可以使用選擇性編譯。

但實(shí)質(zhì)上使用if語(yǔ)句或直接注釋會(huì)更加方便,但在C語(yǔ)言內(nèi)置的頭文件中,為了節(jié)約時(shí)間經(jīng)常使用條件編譯。

1)常量表達(dá)式判斷

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

常量表達(dá)式為真,則中間的語(yǔ)句編譯;

常量表達(dá)式為假,則中間的語(yǔ)句不編譯。

此外,也可以寫成多分支的表達(dá)式條件編譯。

int main(){#if 0printf("111");#elif 1printf("222");#else 0printf("333");#endifreturn 0;}

效果圖:

#

2)是否定義判斷

判斷某個(gè)符號(hào)是否被定義,只要被定義,就編譯中間的語(yǔ)句,無(wú)論其被定義為什么。

#include#define MAXint main(){#if defined(MAX)//或#ifdef MAXprintf("111");#endifreturn 0;}

或判斷某個(gè)符號(hào)是否沒(méi)定義,沒(méi)定義則編譯。

#include#define MAXint main(){#if !defined(MAX)//或#ifndef MAXprintf("111");#endifreturn 0;}

3)嵌套判斷

條件編譯是可以互相嵌套的。

#include#define DEBUG int main(){#ifdef DEBUG#if 1printf("111");#elif 0printf("222");#endif#endif return 0;}

如上述代碼是在是否定義判斷中嵌套常量表達(dá)式判斷。

效果圖:

#

六、頭文件的包含

1)雙引號(hào)與尖括號(hào)

對(duì)于#include來(lái)說(shuō),后面的文件有兩種引用方法:

雙引號(hào),優(yōu)先在本地文件尋找,找不到再去標(biāo)準(zhǔn)庫(kù)中尋找,都沒(méi)有則報(bào)錯(cuò)。尖括號(hào),直接在標(biāo)準(zhǔn)庫(kù)中尋找,找不到則報(bào)錯(cuò)。

所有的頭文件在包含時(shí)都可以使用雙引號(hào),但為了速度和區(qū)別位置,建議自己寫的頭文件用雙引號(hào),標(biāo)準(zhǔn)庫(kù)中的用尖括號(hào)。

2)頭文件的嵌套包含

可以將許許多多的頭文件都包含在一個(gè)自己創(chuàng)建的頭文件中,最后只需要在其他的源文件中包含該自己創(chuàng)建的頭文件即可,像這樣:

#

3)頭文件重復(fù)包含解決方法

在寫多人合作的大型項(xiàng)目時(shí),每個(gè)程序員可能都要包含一次公用的頭文件,當(dāng)他們寫的代碼匯總時(shí),這個(gè)頭文件可能會(huì)被包含多次。

因此,我們使用條件編譯來(lái)解決這個(gè)問(wèn)題。

#if !defined(TIME)#define TIME //...//...   //在這里實(shí)現(xiàn)各種函數(shù)//...#endif

假設(shè)上述代碼為head.h,當(dāng)我們第一次包含head.h時(shí),由于TIME沒(méi)有被定義,因此會(huì)定義一個(gè)TIME,同時(shí)編譯里面的函數(shù)。

當(dāng)我們第二次包含head.h時(shí),因?yàn)門IME被定義過(guò)了,即使head.h里面的內(nèi)容被拷貝到源文件中,也不會(huì)進(jìn)行編譯,從而加快了速度。

注意:在頭文件開頭加入#pragma once即可一鍵實(shí)現(xiàn)上述效果,不必冗雜的代碼,但僅限于自己寫的頭文件,標(biāo)準(zhǔn)庫(kù)的頭文件已經(jīng)幫你加完了。

感謝您的閱讀與耐心~

關(guān)鍵詞: 編程算法

上一篇:
下一篇:

相關(guān)新聞

最近更新

凡本網(wǎng)注明“XXX(非汪清新聞網(wǎng))提供”的作品,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和其真實(shí)性負(fù)責(zé)。

特別關(guān)注

  • 省委召開常委會(huì)議

    今天,在中央第一環(huán)境保護(hù)督察組向吉林省反饋督察情況后,省委書記巴音朝魯立即主持召開省委常委會(huì)議,聽取關(guān)于中央環(huán)保督察反饋問(wèn)題整改工

    2017-12-29 14:30

  • 2017年全球十大航天新聞和中國(guó)十大航天新聞評(píng)選揭曉。

    新浪科技訊 12月28日消息,由空間瞭望智庫(kù)、《國(guó)際太空》和《衛(wèi)星應(yīng)用》雜志,以及中國(guó)太空網(wǎng)聯(lián)合組織的2017年全球十大航天新聞和中國(guó)十大

    2017-12-28 21:47

  • 五星級(jí)酒店馬桶刷洗茶杯,酒店以后還能住嗎?

    保潔人員先用馬桶刷子刷茶杯,隨后用同一把馬桶刷子刷馬桶。緊接著,她用浴巾擦杯子,再蘸了馬桶水擦地,最后將浴巾放在地上整理。馬桶刷刷

    2017-12-28 21:12

  • 這些政策將影響你明年錢袋子

    近日,國(guó)家發(fā)改委、住建部、商務(wù)部、工信部、交通部等部委密集召開年度工作會(huì)議,貫徹落實(shí)中央經(jīng)濟(jì)工作會(huì)議精神,部署2018年的重點(diǎn)工作,在

    2017-12-27 21:40

  • 生態(tài)文明建設(shè)年度評(píng)價(jià)結(jié)果公布:吉林排名靠前

    根據(jù)中共中央辦公廳、國(guó)務(wù)院辦公廳印發(fā)的《生態(tài)文明建設(shè)目標(biāo)評(píng)價(jià)考核辦法》和國(guó)家發(fā)展改革委、國(guó)家統(tǒng)計(jì)局、環(huán)境保護(hù)部、中央組織部印發(fā)的《

    2017-12-26 16:34

  • 長(zhǎng)春市公安局寬城區(qū)分局“一號(hào)追逃目標(biāo)”嫌疑人喜歡二人轉(zhuǎn)“露出馬腳”

    21年前的12月25日,這一天是圣誕節(jié),雖然是西方的節(jié)日,但隨著夜幕降臨,歡樂(lè)的節(jié)日氣氛也隨之而來(lái)。當(dāng)晚,八點(diǎn)多鐘,長(zhǎng)春市寬城區(qū)的一家藥

    2017-12-15 22:18

  • “第一動(dòng)力”正加力

    十九大報(bào)告再次明確創(chuàng)新的地位:創(chuàng)新是引領(lǐng)發(fā)展的第一動(dòng)力,是建設(shè)現(xiàn)代化經(jīng)濟(jì)體系的戰(zhàn)略支撐。2017年,我省創(chuàng)新成果豐碩,形成了跟跑、齊跑

    2017-12-12 10:34

  • 中紀(jì)委機(jī)關(guān)談反腐

    每到關(guān)鍵節(jié)點(diǎn),人們總是根據(jù)一些重要信號(hào)來(lái)判斷一項(xiàng)工作的走勢(shì)。十九大閉幕后的首月,人們熟悉的打虎節(jié)奏和信息如約而至,中央紀(jì)委監(jiān)察部網(wǎng)

    2017-12-08 12:32

  • 撐起“半壁江山” 釋放更強(qiáng)動(dòng)力

    長(zhǎng)春、通化、白山、遼源入選東北地區(qū)民營(yíng)經(jīng)濟(jì)發(fā)展改革示范城市,在政策環(huán)境、金融環(huán)境、創(chuàng)新環(huán)境、促進(jìn)民營(yíng)經(jīng)濟(jì)轉(zhuǎn)型升級(jí)及人才隊(duì)伍建設(shè)等方

    2017-12-08 12:21

  • 300城市土地市場(chǎng)量跌價(jià)漲 成交均價(jià)上漲

    11月,全國(guó)300城市土地市場(chǎng)供求回落,但各線城市土地成交均價(jià)環(huán)同比繼續(xù)上漲。綜合前11個(gè)月來(lái)看,年度土地出讓收入整體保持同比上漲勢(shì)態(tài)。6

    2017-12-07 18:43