亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言中條件編譯詳解

2020-01-26 14:08:13
字體:
來源:轉載
供稿:網友

通常情況,我們想讓程序選擇性地執行,多會使用分支語句,比如if-else 或者switch-case 等。但有些時候,可能在程序的運行過程中,某個分支根本不會執行。

比如我們要寫一個跨平臺項目,要求項目既能在Windows下運行,也能在Linux下運行。這個時候,如果我們使用if-else,如下:

Windows 有專有的宏_WIN32,Linux 有專有的宏__linux__

if(_WIN32)  printf("Windows下執行的代碼/n");else if(__linux__)  printf("Linux下執行的代碼/n");else  printf("未知平臺不能運行!/n");

這段代碼存在兩個問題:1、 在Windows下并沒有定義__linux__,編譯的時候會報錯,同樣在Linux中也沒有定義_WIN32。2、 假定這段程序可以運行,那么在Windows環境下另外兩個分支的代碼根本不可能運行,同理在Linux下也一樣。

處理這種情況我們可以使用條件編譯。條件編譯,顧名思義,就是根據一定的條件進行選擇性的編譯,我們要達到的效果,就是在Windows環境下另外兩個分支的語句根本不會編譯,這樣生成的可執行文件中,也不會還有對應語句的機器碼,這樣既提高了編譯效率,同時也減小了可執行文件的體積。

條件編譯通??梢杂萌N方式實現:

1、 #if--#elif--#else--#endif語句實現

通過這種方法實現的代碼為:

#if(_WIN32)  printf("Windows下執行的代碼/n");#elif (__linux__)  printf("Linux下執行的代碼/n");#else  printf("未知平臺不能運行!/n");#endif

使用這種方式時需要注意,宏定義為真實#if才會執行,也就是說:

假如有宏定義#define _WIN32 0 這個時候#if是不會執行的。需要定義為#define _WIN32 1才會執行

2、 通過#ifdef--#else--#endif語句實現

通過這種方式實現的代碼為

#ifdef(_WIN32)  printf("Windows下執行的代碼/n");#else  printf("Linux下執行的代碼/n");#endif

這種方法下只需要定義了_WIN32就可以,沒有必要為真,也就是說

如果有宏定義#define _WIN32 0 上面#ifdef語句也是可以執行的,甚至#define _WIN32 上面的#ifdef也可以運行

當然也可以加入第一種方法中的#elif語句

#ifdef(_WIN32)  printf("Windows下執行的代碼/n");#elif (__linux__)  printf("Linux下執行的代碼/n");#else  printf("未知平臺不能運行!/n");#end

但是需要注意的是,這種情況下,要想#elif語句執行__linux__的值必須為真?。ㄍ瑫r沒有定義_WIN32)

3、 使用#ifndef語句,這種情況類似第二種,ifndef就是如果沒有定義宏,就執行。

在gcc編譯工具中

我們可以使用-D選項,動態地定義程序所需要的宏

比如我們可以這樣編譯 gcc test.c -o test -D _WIN32      這樣程序就可以在Windows下運行了(當然,實際情況是在Windows環境下,_WIN32已經被定義) gcc中的-D選項會默認將宏定義為1,如果要定義為其他的值使用等于號如:-D _WIN32=0      

很多的時候,尤其是實際的項目中,我們會使用cmake工具來構建自己的程序。

在cmake中

我們可以在CMakeLists.txt中寫入ADD_DEIFNITIONS(-D _WIN32)來添加程序運行時用到的宏。但是這樣,一旦我們需要修改使用的宏,就要修改CMakeLists.txt文件,會很麻煩。

這時我們可以這樣做:

在CMakeLists.txt中寫入

IF(ENVIRO) ADD_DEFINITIONS(-D _WIN32)ENDIF(ENVIRO)

這樣,我們可以在使用cmake命令的時候加入-D選項,定義ENVIRO 命令如下

cmake -D ENVIRO=1,或者 cmake -D ENVIRO=ON

如果要取消這個定義可以使用: cmake -D ENVIRO=OFF 或 cmake -D ENVIRO=0 或者cmake -U ENVIRO

就寫到這里了,希望對你有幫助。。水平有限,有錯誤的地方還請諒解,并誠邀指正。。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美大肥婆大肥bbbbb| 日韩国产高清污视频在线观看| 欧美网站在线观看| 亚洲精品视频在线播放| 97国产真实伦对白精彩视频8| 亚洲免费av电影| 在线播放精品一区二区三区| 日韩亚洲一区二区| 中文字幕亚洲欧美一区二区三区| 久久久亚洲国产| 日韩av毛片网| 成人黄色片在线| 国产精品xxxxx| 精品国产欧美一区二区三区成人| 亚洲开心激情网| 日韩av不卡电影| 亚洲成年网站在线观看| 久久91精品国产91久久久| 日韩欧美a级成人黄色| 国产不卡av在线免费观看| 欧美日韩美女视频| 疯狂做受xxxx高潮欧美日本| 日韩成人激情视频| 精品福利樱桃av导航| 欧美在线视频观看免费网站| 亚洲精品98久久久久久中文字幕| 日韩福利伦理影院免费| 欧美成人午夜激情在线| 亚洲专区国产精品| 中文字幕亚洲一区二区三区五十路| 国产精品美女www| 91精品久久久久久综合乱菊| 国产在线观看一区二区三区| 亚洲无亚洲人成网站77777| 亚洲成人黄色网址| 91中文在线观看| 亚洲女人被黑人巨大进入| 国产精品视频xxxx| 久久精品国亚洲| 久久精品国产亚洲精品2020| 久久91亚洲人成电影网站| 欧美成人精品三级在线观看| 日韩中文字幕在线精品| 中文字幕精品视频| 亚洲一品av免费观看| 欧美视频在线观看免费网址| 日韩精品免费综合视频在线播放| 成人自拍性视频| 亚洲精品黄网在线观看| 亚洲色图美腿丝袜| 亚洲欧美制服综合另类| 91成品人片a无限观看| 日韩av一区在线| 精品一区精品二区| 亚洲视频自拍偷拍| www.久久久久久.com| 国产精品久久久久久久一区探花| 欧美视频在线免费| 欧美亚洲成人精品| 久久久影视精品| 91精品中文在线| 国产成人精品最新| 欧美激情第1页| 亚洲精品之草原avav久久| 久久99久久99精品中文字幕| 免费av在线一区| 欧美激情综合色综合啪啪五月| 日韩视频欧美视频| 韩日精品中文字幕| 日韩av手机在线看| 亚洲无av在线中文字幕| 欧美最近摘花xxxx摘花| 亚洲国产精品一区二区久| 91精品免费久久久久久久久| 69久久夜色精品国产7777| 国产香蕉精品视频一区二区三区| 久久精品这里热有精品| 日韩资源在线观看| 欧美高清在线观看| 日本久久久久久久久| 亚洲精品日韩欧美| 国产成人91久久精品| 亚洲精品按摩视频| 欧美一区三区三区高中清蜜桃| 欧美乱大交做爰xxxⅹ性3| 久久久久久美女| 日韩成人在线免费观看| 两个人的视频www国产精品| 国内精品久久久久伊人av| 亚洲一区二区免费| 日韩美女主播视频| 成人动漫网站在线观看| 亚洲精品欧美日韩专区| 久久人人爽人人爽人人片av高请| 中文字幕亚洲在线| 日韩美女视频免费看| 亚洲国产成人在线视频| 成人免费高清完整版在线观看| 国内免费精品永久在线视频| 欧美精品少妇videofree| 欧美另类在线观看| 91老司机在线| 久久人人爽人人爽人人片av高清| 九色成人免费视频| 久久久久免费视频| 国产精品久久9| 日韩一区在线视频| 国产视频在线一区二区| 韩国视频理论视频久久| 麻豆国产va免费精品高清在线| 黑人巨大精品欧美一区二区三区| 久久精品91久久香蕉加勒比| 国产成人一区二| 国产在线观看精品| 国产成人精品久久二区二区| 亚洲精品狠狠操| 57pao国产成人免费| 色婷婷久久av| 久久深夜福利免费观看| 欧美电影免费观看高清| 欧美一区二区三区免费视| 77777亚洲午夜久久多人| 精品国产精品三级精品av网址| 中文字幕久久精品| 久久欧美在线电影| 亚洲毛片在线观看.| 久久久久九九九九| 成人激情在线播放| 亚洲视频专区在线| 国产成人精品电影久久久| 成人免费在线视频网站| 国产不卡精品视男人的天堂| 91免费精品视频| 亚洲成avwww人| 成人国产精品久久久久久亚洲| 欧美精品情趣视频| 久久精品欧美视频| 激情成人在线视频| 久久香蕉国产线看观看网| 国产不卡一区二区在线播放| 欧美激情区在线播放| 欧美日韩亚洲一区二区三区| 国内外成人免费激情在线视频| 久久韩国免费视频| 国产精品h片在线播放| 亚洲欧美在线免费| 精品无人国产偷自产在线| 伦伦影院午夜日韩欧美限制| 欧美成人三级视频网站| 91av视频在线播放| 91精品久久久久久久久中文字幕| 国产97色在线| 亚洲va码欧洲m码| 清纯唯美日韩制服另类| 亚洲欧美国产视频| 国产精品高清免费在线观看| 中文欧美日本在线资源| 亚洲精品不卡在线| 亚洲国产精品久久精品怡红院| 欧美电影在线观看完整版| 久久中文字幕在线视频| 欧美专区福利在线| 精品人伦一区二区三区蜜桃网站| 在线观看国产精品日韩av|