目录
1. 宏是在预处理指令#define中定义的一种操作.
(1)格式:
#define <宏名/标识符> <字符串>
例如:#define PI 3.14159
(2)常见易错点
谁让你不加括号的,傻了吧
#include<bits/stdc++.h>
#define circle_area(x) (3*x*x)
using namespace std;
int main()
{
cout<<circle_area(2)<<endl;
cout<<circle_area(1+1)<<endl;
return 0;
}
此时我们设PI为3,想用这份代码计算一下⚪的面积,但是看似相同的两行代码,却输出了截然不同的结果。 前者输出为12,后者输出为5。
注意到了吗,这种现象和这篇文章遇到的问题十分相似。
众所周知,宏是一种预处理指令,计算机先预处理再进行计算,所以说这两行看似相同的代码存在着本质上的不同。
circle_area(2) -> 3*2*2=12
circle_area(1+1) -> 3*1+1*1+1=3+1+1=5
所以 ,以后遇到含参的宏定义,一定要把替换文本中的参数括起来,从而强制编译器以正确的顺序计算表达式的值。
2.条件编译
(1)定义:一般情况下,源程序中所有的行都参加编译;但是有时希望其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。
(2)举个栗子:
当我们未注释掉FLAG时,上面一条语句为灰色;但是当注释掉FLAG时,下面的语句为灰色。
(3)预处理器封装。
#ifndef A_H
#define A_H
#endif
用来防止头文件的重复引用。