C++中的宏定义(#define)用法与陷阱?(代码示例)

admin 百科 11
define 是 C++ 预处理器指令,用于编译前文本替换,无类型安全与作用域限制;适用于条件编译、简单常量、头文件卫士等,但需谨慎处理括号和副作用。

C++中的宏定义(#define)用法与陷阱?(代码示例)-第1张图片-佛山资讯网

#define 是 C++ 预处理器指令,用于文本替换,不是类型安全的,也不受作用域限制。它在编译前就被展开,所以不参与语法检查、调试困难、容易出错——但仍有实用场景,比如条件编译、简单常量、头文件卫士等。

基本用法:常量与简单函数式宏

定义常量:

```cpp
#define PI 3.1415926
#define MAX(a, b) ((a) > (b) ? (a) : (b))
```

注意:
PI 后面没有分号,否则会把分号也替进去;
MAX 中每个参数都加了括号,防止运算符优先级问题(如 MAX(x + 1, y * 2));
• 整个表达式也加括号,避免嵌入到更大表达式时出错(如 2 * MAX(3, 4))。

常见陷阱:括号缺失与多次求值

错误写法(没加括号):

立即学习“C++免费学习笔记(深入)”;

```cpp
#define SQUARE(x) x * x // 危险!
int a = 5;
int b = SQUARE(a + 1); // 展开为 a + 1 * a + 1 → 5 + 1 * 5 + 1 = 11
```

正确写法:

```cpp
#define SQUARE(x) ((x) * (x))
```

另一个经典陷阱是带副作用的参数:

标签: 处理器 c++ 作用域

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~