複習c語言深度剖析 22 條件編譯使用分析

2021-09-26 20:01:50 字數 1579 閱讀 7375

1.基本概念

條件編譯的行為類似於c語言中的if…else…; 

條件編譯是預編譯指示命令,用於控制是否編譯某段**; 

可以利用預處理器調整**、刪除**的操作。

2.程式設計實驗

條件編譯初探 

//#include

#define c 1

int main()

編譯器處理後的**為:

int main()

執行結果:

總結:#if…#else…:用來告訴預處理器保留哪一部分**,刪除哪一部分**。

3.條件編譯的本質

預編譯器根據條件編譯指令有選擇的刪除** 

編譯器不知道**分支的存在 

if. … else … 語句在執行期進行分支判斷 

條件編譯指令在預編譯期進行分支判斷 

可以通過命令列定義巨集 :gcc -dmacro=value file.c 或 gcc -dmacro file.c

4.程式設計實驗

通過命令列定義巨集    

方式一#include

int main()

單步編譯:gcc -dc=1 -e test2.c -o test2.i 

​# 1 「test2.c」

int main()

​方式二:

​#include

int main()

5.#include的本質

#include的本質是將已經存在的檔案內容嵌入到當前檔案中

#include的間接包含同樣會產生嵌入檔案內容的操作   

條件編譯可以解決標頭檔案重複包含的編譯錯誤

#include header_file_h

#define heander_file_h

// source code

#endif

6.條件編譯的意義

條件編譯使得我們可以按照不同的條件編譯不同的**段,因而可以產生不同的目標**

#if…#else…#endif被預編譯器處理,if…else…語句被編譯器處理,必然被編譯進目標**

實際工程中條件編譯主要用於以下兩種情況: 

不同的產品線公用乙份** 

區分編譯產品的除錯版和發布版

7.程式設計實驗

產品線區分及除錯**應用    

product.h   

#define debug 1  // 除錯版

#define high  1  // 高階產品

​​​​​​​ product.c

#include

#include 「product.h」

#if debug

#define log(s) printf("[%s:%d] %s\n",file,line, s)

#else

#define log(s) null

#endif

#if high

void f()

#else

void f()

#endif

int main()

執行結果:

8.小結

22 條件編譯使用分析

條件編譯的意義 乙份 支援多種產品版本切換 條件編譯的本質 條件編譯時預編譯指示命令用於控制是否編譯某段 define c 1 if c 1 printf this is first printf n else printf this is second printf n endif 預編譯器根據條...

C語言 (1) 條件編譯

第一種形式 解釋 如果識別符號被 define語句定義過,則編譯程式段1 否則編譯程式段2 incelud define num ok int main ifdef num printf hello world else printf hello china endif return o 因為已經定...

C語言 09條件編譯

條件編譯的概念 通常我們希望程式的其中一部分 只有在滿足一定的情況下才進行編譯,否則不參與編譯,只有參與編譯的 最終才能被執行 這就是條件編譯 基本用法 if condication01 code01.elif condication02 code02.else code03.endif 1 inc...