前置處理器在編譯前對原始碼進行等價替換,主要功能包括檔案包含、條件編譯、佈局控制與巨集替換。本文系統整理常用指令、預定義識別符與現代 C++ 替代方案。
#include 組合原始檔。#if、#ifdef、#ifndef、#endif、#else、#elif 實現版本控制、防止重複包含。#pragma 提供編譯器專用指令(如對齊、初始化函式)。#define 定義常數、函式巨集、字串連接等。| 指令 | 用途 |
|---|---|
#define | 巨集定義 |
#undef | 取消巨集 |
#include | 檔案包含 |
#ifdef/#ifndef | 巨集是否定義 |
#if/#else/#elif/#endif | 條件編譯 |
#line | 變更行號/檔名 |
#error | 輸出錯誤訊息並終止編譯 |
#pragma | 編譯器專用控制 |
#include <iostream>:標準庫,搜尋系統路徑。建議用無 .h 版本(支援命名空間 std、寬字元)。#include "myheader.h":自訂標頭,搜尋專案/工作目錄。
// 防止重複包含
#ifndef MYHEADER_H
#define MYHEADER_H
// 內容
#endif
// 版本控制
#if defined(DEBUG)
// 除錯程式碼
#elif defined(RELEASE)
// 發布程式碼
#else
#error "Must define DEBUG or RELEASE"
#endif
__FILE__:目前編譯檔名__LINE__:目前行號__DATE__:編譯日期(如 "25 Dec 2000")__TIME__:編譯時間(如 "12:30:55")#include:無直接替代,但 namespace 可緩解名稱污染。#pragma:被視為非標準擴充,應謹慎使用。#ifdef:constexpr + if constexpr(C++17)可在編譯期分支,但需語法合法。