C++中断言(assert)的使用

assert宏(在assert.h头文件中定义)用于测试表达式的值,如果表达式的值为假,则assert输出错误信息,并调用函数abort()以结束程序。这是测试某个变量是否具有正确值的有用的调试工具例如以下语句就是一个断言:

assert(x<10);

当在程序中遇到这个语句时,如果x的值大于或等于10,则将打印包含行号和文件名的错误信息,而且程序终止。然后程序将在这个代码区域内查找错误。

void  *memcpy(void *&pvTo, const void *pvFrom, size_t size) {
       char *pbTo = (char*)pvTo;
       char *pbFrom = (char*)pvFrom;
       assert((pvTo != NULL) && (pvFrom != NULL));      
//使用断言检查输入指针的有效性
       assert(pbTo >= pbFrom + size ||  pbFrom >= pbTo + size);
//使用断言检查两个指针指向的内存区域是否重叠
       while(size -- > 0 )
              *pbTo++ = *pbFrom++ ;
}

可以通过定义 NDEBUG 来关闭 assert,但是需要在源代码的开头,include <assert.h> 之前。

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注