条件编译用于在 编译阶段 控制代码的编译行为,可以根据不同的 平台、环境、宏定义 选择性地编译部分代码。
主要预处理指令
| 指令 | 作用 |
|---|---|
#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






暂无评论内容