宏定义
宏定义将一个标识符定义为一个字符串,源代码中的标识符将被指定的字符串替换,这个过程发生在预处理阶段。
发方
C++程序的完整编译过程包括预处理、编译、汇编、链接四个步骤。其中预处理阶段进行宏展开、条件编译等。
在C语言中,通过宏来定义简单函数,可以降低函数调用过程中的开销,而在c++中,可以用inline来声明内联函数来降低函数调用过程的开销。
也可以通过宏来定义一些常量,但由于宏替换发生在预处理阶段,因此如果在编译过程中产生错误,很难进行错误的定位和溯源。
简单的宏定义
1  | //第一种  | 
宏的两种简单用法如上所示,第一种用法将PI全部替换为3.1415926,这里的替换是直接展开的,如错误示范中所示,因此我们在使用宏定义时,要利用括号保证其在展开时不会产生错误。
第二种用法通过宏定义来实现条件编译、避免头文件的重复引入。
宏的高阶用法
#、##、#@三种可以称之为宏的高阶用法,可以实现许多高级特性。
1  | 
  | 
当宏中遇到#和##时,是不能够进行嵌套替换的,不会对#和##之后宏进行展开。
可变参数宏
1  | 
  | 
工厂宏
1  | class Any {  | 
1  | typedef char (*func)(int); //函数指针  |