预处理器
预处理器是在编译之前执行的一段程序,可以部分的改变我们的程序。
include
当预处理看到#include
时会用指定的头文件代替#include
。
头文件保护符
头文件保护符依赖于预处理变量。预处理变量有两种状态:已定义和未定义。
#define
定义一个预处理变量。
#ifdef
当且仅当变量已定义为真。
#ifndef
当且仅当变量未定义为真。
#ifdef
或#ifndef
为真之后,后续操作遇到#endif
结束。
assert
预处理宏
预处理宏其实是一个预处理器变量。assert
就是一个预处理宏,assert
定义在<cassert>
头文件中。它使用一个表达式作为它的条件:1
assert(expr);
对expr
求值,如果为真,什么也不做,否则输出信息,终止程序执行。它用来检查某种错误条件,即当expr
满足条件时什么也不做,当它出错时,就结束。
NDEBUG
预处理变量
assert
的行为依赖于一个名为NDEBUG
的预处理器变量的状态。如果定义了NDEBUG
,那么assert
什么也不做。默认情况下没有定义NDEBUG
,assert
执行检查。
其他函数预处理变量
C++预处理器定义了四个对于程序调试很有用的名字:
__FILE__
__LINE__
__TIME__
__DATA__
注意:C++编译器提供了__func__
变量存放函数名字。
参考文献
1.《C++ Primer》第五版