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