#ifndef和#ifdef都是预处理指令,用于条件编译,但它们的逻辑相反:
1. #ifndef(if not defined)
(不声明时走里面的逻辑)
- 检查某个宏是否没有被定义
- 如果宏未定义,则编译后续代码
- 常用于头文件保护(防止重复包含)(等于#pragma once)
示例:
#ifndef HEADER_H
#define HEADER_H
// 头文件内容
#endif
2. #ifdef(if defined)
(相反,声明后才会走里面的逻辑)
- 检查某个宏是否已被定义
- 如果宏已定义,则编译后续代码
- 常用于平台特定代码或功能开关
示例:
#ifdef DEBUG
printf("Debug信息\n");
#endif
常见用法:
-
#ifndef通常用于创建头文件保护宏 -
#ifdef常用于检查编译器特性、操作系统或调试模式 - 两者都以
#endif结束 - 可以配合
#else使用 还有#elif
其他:#if defined()