一、题目描述
无需惊慌,C++缔造者Bjarne Stroustrup这句话说的CPP是C PreProcessor,即“C代码预处理器”。CPP根据#include #define #if #pragma
等指令对文件进行处理。这种处理发生在编译之前,所以CPP叫“预处理器”。CPP完全是文本层面的处理,与C/C++语法无关。
C/C++的标准库提供了assert
断言宏,用在程序中检查某些必须成立的条件,确保程序运行符合预期。assert(expr)
的参数是一个表达式,如果表达式求值结果相当于false
,那么断言失败。断言失败的后果在调试版程序中一般是报错然后中止程序。在定义NDEBUG
宏、或VC的Release版时断言将被省略,因此断言的表达式不应进行业务处理。
时间有限,预处理指令我们只练习这一次,实现类似断言但总是启用、失败时不中止程序的验证宏verify
。
代码框架如下:
#include <iostream>
using namespace std;
static void verify_failed(const char* file, int line, const char* expr){
// TODO: 仿照样例格式,在验证失败时输出位置和表达式。
}
// 为使源码行号__LINE__准确,验证宏写在了一行中。也可用反斜线续行。
// 表达式最后特意没加分号,使用时就不至于漏写分号。
// #x用了“Stringize”功能,将x对应的表达式转成字符串。这功能必须用CPP,无法用C++实现。
#de