96.说一下你理解的 ifdef endif代表着什么?
96.说一下你理解的 ifdef endif代表着什么?
1. 它是什么
- 属于预处理阶段(编译之前就执行)
- 不是运行时语句,不生成机器码
- 作用:根据宏是否定义,决定某段代码要不要参与编译
2. 基本含义
#ifdef 宏名
// 代码段A
#endif
含义:
如果这个 “宏名” 被定义过(#define 过),就编译代码段 A;否则完全忽略这段代码,就像没写一样。
配套常用的还有:
#ifdef X
// ...
#else
// ...
#endif
#ifndef X // if not defined
// ...
#endif
3. 它到底代表什么?(核心理解)
它代表:
一段代码的 “编译开关”
- 开:代码参与编译
- 关:代码直接被删掉,不进编译
和 if/else 完全不是一个级别:
if:运行时判断,代码一定编译进去#ifdef:编译时裁剪代码,不满足就直接不编译
4. 典型用途(面试常问)
-
防止头文件重复包含
#ifndef _HEADER_H_ #define _HEADER_H_ // 声明内容 #endif -
跨平台代码
#ifdef _WIN32 // Windows 代码 #else // Linux 代码 #endif -
调试版本 / 发布版本切换
#ifdef DEBUG printf("debug info\n"); #endif -
功能裁剪、模块化开关
5. 一句话总结(背这个)
#ifdef ... #endif 是预处理条件编译指令,
作用是根据宏是否定义,决定这段代码是否参与编译,
用于跨平台、防重复包含、调试开关、功能裁剪。

浙公网安备 33010602011771号