C語言 18 條件編譯
再來看看條件編譯,還可以根據條件,選擇性地對某些內容進行忽略。
來認識一下#ifdef、#else、#endif這三種條件編譯指令:
#include <stdio.h>
// ifdef用于判斷是否定義了符號PI,如果沒有的話則處理以下的指令
#ifdef PI
#define M 666
// 如果定義了符號PI,那么就處理這個分支的語句
#else
#define M 777
// 最后需要以endif指令結束整個判斷
#endif
int main() {
// 最后打印M
printf("%d", M);
}
777
可以看到,在沒有定義 PI 的情況下,執行的是#define M 777,那要是現在定義了呢?
編寫一個新的頭文件 test.h:
#define PI 3.1415
現在我們引入這個頭文件,那么對應的預編譯指令也會跟著包含進來:
#include <stdio.h>
#include "test.h"
// ifdef用于判斷是否定義了符號PI,如果沒有的話則處理以下的指令
#ifdef PI
#define M 666
// 如果定義了符號PI,那么就處理這個分支的語句
#else
#define M 777
// 最后需要以endif指令結束整個判斷
#endif
int main() {
// 最后打印M
printf("%d", M);
}
666
可以看到此時得到的結果就是 666 了,因為現在 PI 在引入的頭文件中已經定義了(當然直接在當前源文件中定義也是一樣的)
那如果現在希望判斷某個符號沒定義呢?還有#ifndef表示判斷是否未定義某個符號:
#include <stdio.h>
// ifndef 就是 if not define,跟ifdef反著的
#ifndef PI
#define M 666
#else
#define M 777
#endif
int main() {
printf("%d", M);
}
666
當然,除了判斷某個符號是否存在之外,也可以像條件語句那樣直接進行邏輯判斷,這里需要使用到#if和#elif指令:
#include <stdio.h>
#define M 666
// 若M等于666那么定義K = 999
#if M == 666
#define K 999
// 等同于else if語句
#elif M == 777
#define K 888
// else語句
#else
#define K 000
#endif
int main() {
printf("%d", K);
}
999
并且這些分支還支持嵌套使用:
test.h:
#define PI 3.1415
#include <stdio.h>
#define M 666
#if M == 666
#ifndef L
#include "test.h"
#endif
#elif M == 777
#define K = 888
#else
#define K = 000
#endif
int main() {
printf("%f", PI);
}
3.141500
環境:
- GCC 11.4.0
- VSCode 1.93.1
天河有盡后為涯 星海無邊前作岸

浙公網安備 33010602011771號