首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C/C++ 前置處理器指令完整指南

     編輯:關於C++

前置處理器在編譯前對原始碼進行等價替換,主要功能包括檔案包含、條件編譯、佈局控制與巨集替換。本文系統整理常用指令、預定義識別符與現代 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")

現代 C++ 替代趨勢

  • #include:無直接替代,但 namespace 可緩解名稱污染。
  • #pragma:被視為非標準擴充,應謹慎使用。
  • #ifdef:constexpr + if constexpr(C++17)可在編譯期分支,但需語法合法。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved