c25---条件编译
生活随笔
收集整理的這篇文章主要介紹了
c25---条件编译
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
//
// main.c
// 條件編譯(宏定義是簡(jiǎn)單的替換,要給參數(shù)和結(jié)果都加括號(hào))
#include <stdio.h>#define SCORE 90#define DEBUG 1 // 0是調(diào)試階段 1是發(fā)布階段
//printf和打印log是很消耗性能的。#if DEBUG == 0
// 調(diào)試階段
#define NJLog(format, ...) printf(format,## __VA_ARGS__)
#else
// 發(fā)布階段
#define NJLog(format, ...)
#endif/*條件編譯和選則結(jié)構(gòu)if的共同點(diǎn)都可以對(duì)給定的條件進(jìn)行判斷, 添加滿足或者不滿足都可以執(zhí)行特定的代碼條件編譯和選則結(jié)構(gòu)if的共區(qū)別1.生命周期不同if 運(yùn)行時(shí)#if 編譯之前2.#if需要一個(gè)明確的結(jié)束符號(hào) #endif為什么需要一個(gè)明確的結(jié)束符號(hào)?如果省略掉#endif, 那么系統(tǒng)就不知道條件編譯的范圍, 那么會(huì)將滿足條件之后的第二個(gè)條件之后的所有內(nèi)容都清除(不參與編譯)3.if會(huì)將所有的代碼都編譯到二進(jìn)制中#if只會(huì)將滿足條件的部分一直到下一個(gè)條件的部分 編譯到二進(jìn)制中條件編譯的優(yōu)點(diǎn)1.縮小應(yīng)用程序的大小應(yīng)用場(chǎng)景:用于調(diào)試和發(fā)布階段進(jìn)行測(cè)試調(diào)試階段: 程序?qū)懘a的階段發(fā)布階段: 上傳到AppStore的階段*/
int main(int argc, const char * argv[]) {// 條件編譯和if非常非常像// if選擇結(jié)構(gòu)會(huì)對(duì)給定條件進(jìn)行判斷, 如果條件滿足就執(zhí)行if后面大括號(hào)中的內(nèi)容// 條件編譯也一樣, 會(huì)對(duì)給定的條件進(jìn)行判斷, 如果條件滿足就編譯條件后面的內(nèi)容int score = 90;if (score == 100) {printf("牛逼\n");printf("發(fā)朵大紅花\n");NJLog("牛逼\n");NJLog("發(fā)朵大紅花\n");}else if(score == 90){printf("牛X\n");printf("發(fā)朵小紅花\n");NJLog("牛X\n");NJLog("發(fā)朵小紅花\n");}else{printf("繼續(xù)加油\n");printf("別哭\n");NJLog("繼續(xù)加油\n");NJLog("別哭\n");}int score = 100;/*預(yù)處理指令什么時(shí)候執(zhí)行? 編譯之前。變量什么時(shí)候定義? 執(zhí)行了才會(huì)定義。編譯之后。注意點(diǎn): 條件編譯不能用來(lái)判斷變量, 因?yàn)椴辉谕粋€(gè)生命周期君生我未生, 我生君已老一般情況下, 條件編譯是和宏定義結(jié)合在一起使用的(都是預(yù)編譯指令,生命周期一樣)
*/
#if score == 100
#if SCORE == 100printf("牛逼\n");printf("發(fā)朵大紅花\n");
#elif SCORE == 90printf("牛X\n");printf("發(fā)朵小紅花\n");
#elseprintf("繼續(xù)加油\n");printf("別哭\n");
#endif // 作為結(jié)束符號(hào),打印"繼續(xù)加油,別哭"#if DEBUG == 0 //預(yù)編譯指令都以#開頭char *name = "lnj";char *pwd = "123";
#elsechar *name = NULL;char *pwd = NULL;
#endif //結(jié)束符號(hào)printf("name = %s, pwd = %s\n", name, pwd);NJLog("name = %s, pwd = %s\n", name, pwd);return 0;
} //
// main.c
// 條件編譯其它寫法
#include <stdio.h>#define SCORE 100
#define COUNT 50int main(int argc, const char * argv[]) {#ifdef SCORE // 判斷是否定義了后面的宏printf("score\n");
#elif COUNTprintf("count\n");
#elseprintf("OTHER\n");
#endif#ifndef SCORE // 是不是沒(méi)有定義名稱叫做SCORE的宏printf("no score\n");
#elseprintf("score\n");
#endif#if defined(SCORE) // 判斷是否定義了SCORE這個(gè)宏printf("score\n");
#elseprintf("no score\n");
#endif#if !defined(SCORE) // 判斷是否沒(méi)有定義SCORE這個(gè)宏printf("no score\n");
#elseprintf("score\n");
#endifreturn 0;
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/yaowen/p/7403396.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的c25---条件编译的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 乌鲁木齐中海_鼎大观_锦是毛坯房还是精装
- 下一篇: @PathVariable详解