自用C語言篇 預處理 條件編譯

2021-09-26 12:58:06 字數 2035 閱讀 5549

擴充套件if define()的一般格式

#ifndef

#if、#elif和#else

在部分情況下,希望程式的其中一部分**只有在滿足一定條件時才進行編譯,否則不參與編譯(只有參與編譯的**最終才能被執行),這就是條件編譯。

可以使用相關指令告訴編譯器根據條件執行或忽略相關**塊

#ifdef表示,如果預處理器已定義了指出的識別符號,則執行#else或#endif指令之前的所有指令並編譯所有c**(比如先出現#else,則只執行到#else上一條**)。如果預處理器未定義指出的識別符號,且有#else指令,則執行#else和#endif指令之間的**。

#ifdef、#else在一定程度上類似於if else。但必須注意的是

#else是根據需要來新增,但#endif是必須存在的。

#ifdef 識別符號

…code1…

#else

…code2…

#endif

#ifdef num

//如果已經使用#define定義了num,則執行下列**,到#else之前

#define num2

2#else

//如果沒有使用#define定義num,則執行下列**

#define num

1#endif

#ifdef也可用 #if defined()來實現相關功能

#if defined(識別符號)

…code…

#endif

如果前面定義過這個巨集,就將code編譯進去。

用法與#ifdef相同。

可以和#else一起使用,#endif必須存在。但跟#ifdef邏輯相反,#ifndef指令判斷後面的識別符號是否是未定義的。

常用於定義之前未定義的常量。當乙個工程裡面包含多個標頭檔案時,使用#ifndef可以防止相同的巨集被重複定義

#ifndef可用#if !defined()來實現相關功能

#if !defined(識別符號)

…code…

#endif

如果前面沒有定義過這個巨集,就將code編譯進去。

#if在一定程度上類似於if。

#if 條件1

…code1…

#elif 條件2

…code2…

#else

…code3…

#endif

1. 如果條件1成立,那麼編譯器就會把#if 與 #elif之間的code1**編譯進去

2. 如果條件1不成立、條件2成立,那麼編譯器就會把#elif 與 #else之間的code2**編譯進去

3. 如果條件1、2都不成立,那麼編譯器就會把#else 與 #endif之間的code3編譯進去

4. #if 和 #elif後面的條件一般是判斷巨集定義而不是判斷變數。(條件編譯是在編譯之前做的判斷,巨集定義也是編譯之前定義的)

5.#endif不可少

#include  

#define num1

int main()

輸出結果為:

num > 0

程式分析:

首先定義了乙個巨集num,由於num為1,所以#elif的條件成立,printf(「num > 0」); 這條**將會被編譯進去,其實編譯預處理後的**為:

#include 

檔案中的內容實際會代替#include 的位置

int main()

C語言預處理之條件編譯

這是stdio.h的頭幾行 if msc ver 1000 pragma once endif ifndef inc stdio define inc stdio if defined win32 defined mac error error only mac or win32 targets s...

C語言 預處理指令 條件編譯

感謝 一 條件編譯 概念 在很多情況下,我們希望程式的其中一部分 只有在滿足一定條件時才進行編譯,否則不參與編譯 只有參與編譯的 最終才能被執行 這就是條件編譯。二 基本用法 1.if 條件1 code1.elif 條件2 code2.else code3.endif1 如果條件1成立,那麼編譯器就...

預處理 條件編譯

假如現在要開發乙個c語言程式,讓它輸出紅色的文字,並且要求跨平台,在 windows 和 linux 下都能執行,怎麼辦呢?這個程式的難點在於,不同平台下控制文字顏色的 不一樣,我們必須要能夠識別出不同的平台。windows 有專有的巨集 win32,linux 有專有的巨集 linux 以現有的知...