本节对c++的宏定义进行描述。c++使用预处理器来对宏进行操作,我们可以写一些宏来替换代码中的问题,c++的宏是以#开头,预处理器会将所有的宏先进行处理,之后在通过编译器进行编译。宏简单说就是文本替换,可以替换代码中的任何东西,因此过度使用宏会降低代码的可读性。
- #define替换代码中任意文本
-
#include <iostream> #define WAIT std::cin.get(); int main() { //使用WAIT替换std::cin.get();这行语句,但不建议这样写,降低代码的可读性,只是举例用 WAIT }
- #define可以传入参数
-
#include <iostream> #define LOG(x) std::cout << x << std::endl; int main() { LOG("Hello World!") std::cin.get(); }
- 宏可以进行条件判断。使用宏可以很好的控制日志的打印,例如DEBUG模式下打印的日志信息需要详细一点,而RELEASE模式下则有些日志不需要打印。在Debug模式下添加预处理器_DEBUG,在release模式下添加NDEBUG
-
#include <iostream> //只在DEBUG模式下打印log,release模式下不打印 #ifdef _DEBUG #define LOG(x) std::cout << x << std::endl; #else #define LOG(x) #endif int main() { LOG("Hello World!") std::cin.get(); }
- 可以给宏定义复制
-
#include <iostream> //只在DEBUG模式下打印log,release模式下不打印 #if _DEBUG == 1 #define LOG(x) std::cout << x << std::endl; #elif defined(NDEBUG) #define LOG(x) #endif int main() { LOG("Hello World!") std::cin.get(); }