預編譯處理 條件編譯分析

2021-08-20 11:57:23 字數 1321 閱讀 2851

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

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

示例**:條件編譯初探

// #include 

#define c 1

int main()

輸出結果

this is first printf…

很明顯,當我們巨集定義常量為1時才會編譯s = 「this is first printf…\n」 ;

使用預編譯指令可以得知:

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

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

可以通過命令列定義巨集

gcc -dmacro=vlaue file.c 或

gcc -dmacro file.c

如上述**:可以使用gcc -dc=1 test.c(但是前提是沒有這個巨集定義或者只能等於紅一定的常量)

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

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

問題:間接包含同乙個標頭檔案是否會產生編譯錯誤?

答案是肯定會的,在同乙個檔案中展開標頭檔案的內容,會導致多個全域性變數重名,發生編譯錯誤。

條件編譯可以解決標頭檔案重複包含的編譯錯誤(加入以下**即可解決)

// global.h

#ifndef _global_h_

#define _global_h_

int global = 10 ;

#endif

// test.h

#ifndef _test_h_

#define _test_h_

#include "global.h"

const

char *name = "test.h" ;

char * hello_world ()

#endif

使用了#ifndef…#endif語句。意思是當沒有定義test_h這個檔案時才執行下面**。

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

利用這個特性,在實際工程中條件編譯主要用於以下兩種情況

不同的產品線共用乙份**(乙個產品高低端區別)

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

預編譯處理

1.編譯過程的簡介 預編譯 a.處理所有的注釋,以空格代替。b.將所有 define刪除,並展開所有的巨集定義,字串替換。c.處理條件編譯指令 if,ifdef,elif,else,endif d.處理 include,並展開被包含的檔案,把頭檔案中的宣告,全部拷貝到檔案中。e.保留編譯器需要使用的...

C C 預編譯指令和條件編譯

1.常見的預編譯指令和條件編譯項有如下這些 define undef ifdef ifndef if elif else endif 1 define 定義乙個預處理巨集 2 undef 取消巨集的定義 3 if 編譯預處理中的條件命令,相當於c語法中的if語句 4 ifdef 判斷某個巨集是否被定...

stdafx h預編譯處理

stdafx.h中沒有函式庫,只是定義了一些環境引數,使得編譯出來的程式能在32位的作業系統環境下執行。windows和mfc的include檔案都非常大,即使有乙個快速的處理程式,編譯程式也要花費相當長的時間來完成工作。由於每個.cpp檔案都包含相同的include檔案,為每個.cpp檔案都重複處...