C++ 预处理器

C++ 预处理器(Preprocessor) 是在编译之前对源代码进行处理的工具。预处理器指令通常以 # 开头,不属于 C++ 语言本身,而是由编译器在正式编译之前处理的内容。


🧠 常见的预处理器指令

指令作用
#include包含头文件
#define定义宏(宏替换)
#undef取消宏定义
#ifdef如果宏已定义,则编译该部分代码
#ifndef如果宏未定义,则编译该部分代码
#if条件编译
#elif条件编译的“否则如果”部分
#else条件编译的“否则”部分
#endif结束条件编译块
#pragma编译器指令(与具体编译器相关)
#error报错并终止编译
#line修改编译器认为的当前行号和文件名

📌 示例代码

#include 示例

#include <iostream>     // 包含标准输入输出库
#include "myheader.h"   // 包含用户自定义头文件

#define 和 #ifdef 示例

#define DEBUG

#ifdef DEBUG
    #define LOG(x) std::cout << x << std::endl
#else
    #define LOG(x)
#endif

int main() {
    LOG("调试信息");
}

宏函数示例

#define SQUARE(x) ((x) * (x))

int main() {
    int a = 5;
    int b = SQUARE(a + 1);  // 实际替换为 ((a + 1) * (a + 1))
    std::cout << b << std::endl;
}

⚠️ 注意事项

  • 宏不是类型安全的,容易出错,建议使用 constexprinline 或 const 替代。
  • 使用条件编译时注意宏逻辑的完整性,确保 #ifdef#else#endif 成对匹配。
  • 宏展开可能导致副作用,如:SQUARE(x++) 会出错。

✅ 实际用途

  • 头文件保护(防止重复包含):
#ifndef MYHEADER_H
#define MYHEADER_H

// 内容

#endif
  • 条件编译以适配不同平台或调试/发布版本。
  • 用宏简化重复的代码逻辑(虽然建议适度使用)。

如果你想我帮你具体分析一段预处理器代码,或解释某个复杂宏,也可以贴出来。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注