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

C 語言條件編譯詳解:跨平台編譯與除錯模式切換

     編輯:C 語言基礎

條件編譯可根據不同條件編譯不同程式碼,產生不同目標檔,屬預處理階段功能。

跨平台範例:Windows/Linux 顏色輸出

#include <stdio.h>
int main() {
#if _WIN32
    system("color 0c");
    printf("https://c.biancheng.net\n");
#elif __linux__
    printf("\033[22;31mhttps://c.biancheng.net\n\033[22;30m");
#else
    printf("https://c.biancheng.net\n");
#endif
    return 0;
}

預處理階段保留符合條件的程式碼,其餘捨棄,未定義巨集不會導致編譯錯誤。

#if 完整語法

#if 整型常量表達式1
    程式段1
#elif 整型常量表達式2
    程式段2
#elif 整型常量表達式3
    程式段3
#else
    程式段4
#endif
  • 判斷條件必須為整型常量表達式(無變數、結果為整數),異於 if。
  • #elif、#else 可省略。

#ifdef / #ifndef

#ifdef 巨集名
    程式段1
#else
    程式段2
#endif

#ifndef 巨集名
    程式段1
#else
    程式段2
#endif
  • #ifdef:巨集已定義 → 編譯程式段1。
  • #ifndef:巨集未定義 → 編譯程式段1,功能相反。
  • #else 可省略。

實戰:偵測 Debug/Release 模式

#include <stdio.h>
#include <stdlib.h>
int main() {
#ifdef _DEBUG
    printf("正在使用 Debug 模式編譯程式...\n");
#else
    printf("正在使用 Release 模式編譯程式...\n");
#endif
    system("pause");
    return 0;
}

VS/VC 中 Debug 定義 _DEBUG,Release 不定義。

關鍵區別

  • #if 後接整型常量表達式(可含運算、邏輯)。
  • #ifdef/#ifndef 後只能接巨集名。
// 僅 #if 可用
#if NUM == 10 || NUM == 20

// 多巨集同時存在判斷
#if (defined NUM1 && defined NUM2)

#ifdef 可視為 #if defined 縮寫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved