条件编译用于在 编译阶段 控制代码的编译行为,可以根据不同的 平台、环境、宏定义 选择性地编译部分代码。
主要预处理指令
| 指令 | 作用 | 
|---|---|
| #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进行条件判断
- 适用于 跨平台开发、调试模式、头文件保护
THE END
    








暂无评论内容