條件編譯是 C 預處理器的強大功能,可根據編譯時條件決定程式碼是否被編譯,常用於跨平台移植、除錯開關、防止重複包含頭檔等場景。
#define R 3 #undef R #define R 4 // 合法:先取消再重新定義
#undef。#ifndef HEADER_FILENAME #define HEADER_FILENAME // 頭檔內容 #endif
#if MACHINE == 68000
int x;
#else
long x;
#endif
#ifdef MACRO:若 MACRO 已定義則編譯後續區塊。#ifndef MACRO:若 MACRO 未定義則編譯後續區塊。#else/#endif 界定區塊。#if defined(IBMPC)
#include "ibmpc.h"
#elif defined(VAX)
#include "vax.h"
#elif defined(MAC)
#include "mac.h"
#else
#include "general.h"
#endif
defined(NAME) 為預處理器運算子,定義過回傳 1,否則 0。#ifdef 之處:可搭配 #elif 實現多重互斥分支。#error "訊息":強制編譯器報錯並顯示訊息,常用於編譯期斷言(如檢查架構支援)。#line 100 "myfile.c":修改編譯器報告的行號與檔名,常用於自動產生程式碼工具。#pragma:編譯器專用指令(如 #pragma once、#pragma pack),不可移植,謹慎使用。#pragma once(現代編譯器支援)或傳統 #ifndef 模式。#define DEBUG 1,程式中用 #if DEBUG 包裹除錯碼,發布時改 0 即可移除。