国产精品黄色片_精品小视频在线_日韩欧美国产成人_欧美一区二区在线看_色婷婷视频在线观看_福利一区三区_欧美日本亚洲韩国国产_丁香天五香天堂综合

預處理指令用法詳解(C語言)-天天快播報

發布時間:2023-02-13 17:07:20
編輯:
來源:騰訊云
字體:

前言

使編譯器執行預處理操作的代碼被稱為預處理指令,本文介紹常見的預處理指令的實際用法。


(資料圖片)

一、預處理符號

預處理符號是C語言內置的符號,是可以直接使用的。

#

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

二、#define

1)定義標識符

#define可以用來定義標識符,其語法為:#define name stuff,經過預處理后,stuff會被直接替換為·name

stuff的內若過長,可在句末加上\續行符號,像這樣:

#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:數值替換

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

示例2:循環替換

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

運行代碼,將會在屏幕上死循環地打印A。

示例3:分支替換

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

2)宏定義

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

示例1:

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

示例2:

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

因為#define的功能只是替換,若要利用宏定義實現快捷的函數操作,最好的方法是在宏定義時多加括號,以便于達到整體求值的效果,像這樣:#define double(x) (x)+(x)。

注意:由于宏是直接替換,因此傳參時嚴禁使用自增,自減,傳參時使用,替換后依然會再次執行,會導致不可預測的后果。

3)字符串轉換符

字符串有自動連接的特點,例如運行以下這段代碼:

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

效果圖:

#

字符串轉換符#就是利用這個特性,它可以將宏定義中傳入的參數,替換為字符串格式。

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

在上述代碼中,#號a直接轉化為字符串,隨后三個字符串拼接在一起。

效果圖:

#

利用該方法可以只傳參一次實現值和名同時打印。

4)片段鏈接符

在宏定義時,片段連接符##可以實現將兩個符號連接在一起,使其成為一個符號,前提是這個合成的符號必須已經被定義。

#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;}

在上述代碼中,##會把sum和參數x連接在一起,當我們傳入1經過預處理后,等效于:sum1*=2

效果圖:

#

5)宏定義VS函數

宏定義的優勢:

宏定義的執行速度遠遠超過函數,當執行簡單的計算時,更適合使用宏定義。宏定義傳參時沒有類型檢測,可以將任意的數據傳入。宏定義是直接替換,可以傳入各種各樣的符號,實現許許多多函數做不到的功能。(可以傳入類型、傳入函數、傳入語句等等

宏定義的劣勢:

宏定義不能調試、不能遞歸,因此宏定義只適合做簡單的計算。宏定義是直接替換,因此相鄰操作符的優先級很有可能產生不期望的順序,因此要盡可能帶括號。宏定義傳參沒有類型檢測,因此不夠嚴謹。

6)命名公約

以下幾條公約,必須遵守

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

被刪除后的標識就不能再使用了。

四、命令行編譯

指在VScodeLinux等用命令行執行編譯的環境下,可以在編譯時對變量進行賦值。

五、條件編譯

在寫程序時,有些代碼是為了查看某個部分是否正確而寫的的調試代碼。

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

但實質上使用if語句或直接注釋會更加方便,但在C語言內置的頭文件中,為了節約時間經常使用條件編譯。

1)常量表達式判斷

#if 常量表達式//...#endif

常量表達式為真,則中間的語句編譯;

常量表達式為假,則中間的語句不編譯。

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

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

效果圖:

#

2)是否定義判斷

判斷某個符號是否被定義,只要被定義,就編譯中間的語句,無論其被定義為什么。

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

或判斷某個符號是否沒定義,沒定義則編譯。

#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;}

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

效果圖:

#

六、頭文件的包含

1)雙引號與尖括號

對于#include來說,后面的文件有兩種引用方法:

雙引號,優先在本地文件尋找,找不到再去標準庫中尋找,都沒有則報錯。尖括號,直接在標準庫中尋找,找不到則報錯。

所有的頭文件在包含時都可以使用雙引號,但為了速度和區別位置,建議自己寫的頭文件用雙引號,標準庫中的用尖括號。

2)頭文件的嵌套包含

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

#

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

在寫多人合作的大型項目時,每個程序員可能都要包含一次公用的頭文件,當他們寫的代碼匯總時,這個頭文件可能會被包含多次。

因此,我們使用條件編譯來解決這個問題。

#if !defined(TIME)#define TIME //...//...   //在這里實現各種函數//...#endif

假設上述代碼為head.h,當我們第一次包含head.h時,由于TIME沒有被定義,因此會定義一個TIME,同時編譯里面的函數。

當我們第二次包含head.h時,因為TIME被定義過了,即使head.h里面的內容被拷貝到源文件中,也不會進行編譯,從而加快了速度。

注意:在頭文件開頭加入#pragma once即可一鍵實現上述效果,不必冗雜的代碼,但僅限于自己寫的頭文件,標準庫的頭文件已經幫你加完了。

感謝您的閱讀與耐心~

標簽: 編程算法

   原標題:預處理指令用法詳解(C語言)-天天快播報

>更多相關文章
最近更新
久久蜜桃一区二区| 欧美日韩精品欧美日韩精品| 中文字幕在线免费观看视频| 国产99一区视频免费| 天堂在线免费av| 国产精品久久久一区二区| 欧美成人精品3d动漫h| 伊人久久大香线蕉av不卡| 香蕉乱码成人久久天堂爱免费| 日本综合视频| 亚洲免费观看高清完整版在线观看| 19禁羞羞电影院在线观看| 久久久久久久久久久黄色| 手机av免费在线| 久久先锋资源网| 川上优av中文字幕一区二区| 国产欧美日韩精品一区| 在线免费日韩片| 亚洲日本在线观看| 亚洲18在线| 一本色道亚洲精品aⅴ| 国产精品美女在线观看直播| 欧美三级三级三级爽爽爽| 奇米狠狠一区二区三区| 欧美成人国产一区二区| 欧美激情91| 国产超碰在线观看| 国内精品久久久久影院薰衣草| 久久在线播放| 日韩精品在线一区二区| 在线日本成人| 羞羞视频在线观看| 国产精品888| 91www在线| 一区二区三区毛片| 欧美美女啪啪| 亚洲激情在线观看| 日韩国产欧美在线播放| 色网站免费在线观看| 91视频.com| 91伊人久久| 欧美日韩视频在线观看一区二区三区| 精品国产网站| 精产国产伦理一二三区| 国产乱码字幕精品高清av | 男女激情片在线观看| 国产美女主播视频一区| a天堂资源在线| 精品久久久国产精品999| 欧美伦理在线视频| 500福利第一精品导航| 国产成人激情av| 国产精品亚洲一区二区三区在线观看| 午夜精品久久一牛影视| 日韩欧美大片| 日本啊v在线| 中文字幕在线不卡国产视频| 乱亲女h秽乱长久久久| 日韩经典一区二区三区| 精彩视频一区二区三区| 伊人久久精品一区二区三区| 欧美视频中文字幕| 国产情侣一区| 国产极品人妖在线观看| 欧美视频一区二区三区…| 91tv官网精品成人亚洲| 黄色av网站在线看| 亚洲精品国产高清久久伦理二区| 国产99久久精品一区二区300| 免费成人高清| 久久久www成人免费毛片麻豆| 久久丁香四色| 黑巨人与欧美精品一区| 91麻豆免费看片| 日本亚洲不卡| 一本大道香蕉久在线播放29 | 国产午夜亚洲精品一级在线| 亚洲第一视频网| 成人性生交大片免费看中文 | 亚洲欧美日韩在线观看a三区| 污的网站在线观看| 欧美日韩美少妇| 免费观看在线综合| 国产美女久久| 国产免费福利| 99香蕉久久| 亚洲欧美区自拍先锋| 精品视频日韩| 午夜视频在线免费观看| 精品久久久久久久久久久久久| 亚洲第一黄色| 免费成人直播| 亚洲精品中文字幕女同| 国产亚洲综合色| 欧美1级片网站| 中文字幕有码在线观看| 欧美日韩精品三区| 国产精品2024| 日韩深夜影院| 99精品老司机免费视频| 日本精品一级二级| 国产综合色视频| 卡通动漫精品一区二区三区| 青青视频在线观| 色香色香欲天天天影视综合网| 免费久久99精品国产| 成人高潮视频| 97电影在线| 欧美乱妇15p| www.av精品| 色综合天天爱| 国产精选在线| 白天操夜夜操| 一区二区三区在线免费观看| 性伦欧美刺激片在线观看| 高清在线一区二区| 大地资源高清播放在线观看 | 欧美日韩的一区二区| 成人福利视频在线看| 97人人精品| 日韩久久一区二区三区| julia中文字幕久久亚洲蜜臀| 午夜精品在线看| 国产美女久久久久| 人人狠狠综合久久亚洲婷| 蜜桃麻豆影像在线观看| 色老板亚洲精品一区| 欧美午夜精品在线| 成人国产亚洲欧美成人综合网| 日韩欧美午夜| 456成人影院在线观看| 亚洲一区二区三区成人| 欧美男男青年gay1069videost | 欧美三级三级三级爽爽爽| 91麻豆成人久久精品二区三区| 你懂的国产精品| 色综合.com| 日本电影在线观看网站| 日韩av中文字幕在线| 午夜一区二区三区视频| 大白屁股一区二区视频| 久久久久av| 欧美经典一区| 呦呦在线视频| 超碰影院在线| 欧美一级国产精品| 亚洲综合久久久| 成人av电影在线播放| 激情久久一区| silk一区二区三区精品视频| www.综合网.com| 四虎精品成人影院观看地址| 欧美日韩在线免费视频| 中文字幕在线一区| 国产成人综合网站| 激情久久久久| 国产精品视频一区二区三区四蜜臂| 欧美成人国产一区二区| 97人人在线视频| 女人让男人操自己视频在线观看| 黄色成人小视频| 99视频有精品高清视频| 宅男在线一区| 怕怕欧美视频免费大全| 天天超碰亚洲| 日韩黄色大片网站| 美国一区二区三区在线播放 | 欧美国产一级| 国产精品护士白丝一区av| 国产一区二区亚洲| ww久久综合久中文字幕| 黄色网址视频在线观看| 国产69精品久久久久孕妇| 亚洲成人免费在线视频| 色女孩综合影院| 亚洲美女少妇撒尿| 久久九九久精品国产免费直播| 国内成人精品2018免费看| 国产视频一区欧美| 欧美精品成人| 日韩在线理论| 亚洲+变态+欧美+另类+精品| 97久久精品一区二区三区的观看方式| 欧美办公室脚交xxxx| 在线免费观看的av| 91美女视频在线| 伊人75在线| 香港经典三级在线| 亚洲国产成人久久综合| 不卡福利视频| 香蕉久久夜色精品国产更新时间| 国产在视频线精品视频www666| 蜜桃一区二区三区| 亚洲欧美不卡| 床上的激情91.| 欧美性生交大片免网| 亚洲精品成人av| 国产原创在线观看| 一区二区三区亚洲变态调教大结局| 亚洲三级影院|