6 4 月 2026, 周一

条件编译用于在 编译阶段 控制代码的编译行为,可以根据不同的 平台、环境、宏定义 选择性地编译部分代码。

主要预处理指令

指令 作用
#ifdef 如果宏被定义,则编译
#ifndef 如果宏未定义,则编译
#if 进行条件判断
#elif else if,如果前面条件不满足,则判断当前
#else else,前面所有条件不满足时执行
#endif 结束条件编译

基本示例:

#include <stdio.h>

#define DEBUG  // 定义 DEBUG 宏

int main() {
#ifdef DEBUG
    printf("调试模式开启\n");
#endif

#ifndef RELEASE
    printf("非发布模式\n");
#endif

    return 0;
}

编译时使用 -D 定义宏

gcc main.c -o main -DDEBUG

-DDEBUG 相当于 #define DEBUG,启用 #ifdef DEBUG 部分代码

#if 进行数值判断

#include <stdio.h>

#define VERSION 2

int main() {
#if VERSION == 1
    printf("版本 1\n");
#elif VERSION == 2
    printf("版本 2\n");
#else
    printf("未知版本\n");
#endif
    return 0;
}

适配不同平台

#include <stdio.h>

int main() {
#ifdef _WIN32
    printf("Windows 平台\n");
#elif __linux__
    printf("Linux 平台\n");
#elif __APPLE__
    printf("Mac 平台\n");
#else
    printf("未知平台\n");
#endif
    return 0;
}

避免重复包含头文件(#ifndef 方式)

#ifndef MAIN_H
#define MAIN_H

// 头文件内容

#endif // MAIN_H

保证头文件只被包含一次,避免重复定义错误

总结

  • #ifdef / #ifndef 检测是否定义
  • #if / #elif 进行条件判断
  • 适用于 跨平台开发、调试模式、头文件保护
Avatar photo

sion932