断言与静态断言

ASSERT:

NAME                                                 // 准确陈述
assert - abort the program if assertion is false     // assert(断言) - 如果断言(assertion)是错误的就终止这个程序。

SYNOPSIS                                             // 概要
#include <assert.h>                                  // assert函数包含在<assert.h> 这个头文件中

void assert(scalar expression);                      // 函数原型 :void assert(常量 表达式)

DESCRIPTION                                          // 描述
This macro(宏指令) can help programmers find bugs in their programs, or handle exceptional cases via(经由)
a crash(失败) that will produce limited debugging output.

If expression is false (i.e., compares equal to zero), assert() prints an error message to
standard error and terminates(终止) the program by calling abort(3). The error message includes
the name of the file and function containing the assert() call, the source code line number
of the call, and the text of the argument(理由); something like(有点像):

prog: some_file.c:16: some_func: Assertion `val == 0‘ failed.

If the macro NDEBUG is defined at the moment <assert.h> was last included, the macro
assert() generates(生成) no code, and hence(执行) does nothing at all. It is not recommended(建议) to define
NDEBUG if using assert() to detect(检查) error conditions since the software may behave non-deter‐
ministically.

试着翻译一下:(翻译错误的地方请指正)

描述:

这个assert()这个宏指令帮助程序员找程序中的bugs。或者处理经由debug输出限制导致失败的cases。

如果表达式失败,assert()这个宏将打印一个标准错误的信息并且调用abort(3)这个函数来终止这个程序,

这个错误信息包括包含调用asser()宏的函数和包含调用assert()宏的文件名,行号,和理由,有点像:

some_file.c:16: some_func: Assertion `val == 0‘ failed.

如果宏NDEBUG 是定义在<assert.h>之前,则assert()这个宏不生成代码,什么也不执行。我们不建议在使用essert()进行error检查时定义define。

原文地址:https://www.cnblogs.com/tito/p/12346736.html

时间: 2024-11-09 00:39:04

断言与静态断言的相关文章

C++11 新特性,运行时断言与静态断言

C98或C99中的库为:<cassert> 或<assert.h> 运行时断言,故明思议是当程序在运行的时候才作为判决,可以认为是对参数的有效性的判断. 而静态断言,是对参数的条件判断提前做了,在预编译的时候进行完成的.如: //demo1.cpp #include <cassert> using namespace std; char *arrayAolloc(int n){ assert(n>0); return new char [n]; } int mai

C++断言与静态断言

断言是很早之前就有的东西了,只需要引入cassert头文件即可使用.往往assert被用于检查不可能发生的行为,来确保开发者在调试阶段尽早发现“不可能”事件真的发生了,如果真的发生了,那么就表示代码的逻辑存在问题.最好的一点就是,断言只在Debug中生效,因此对于Release版本是没有效率上的影响的. #include <iostream> #include <cassert> using namespace std; int main() { int i = 22; asser

【C/C++学院】0816-引用包装器/仿函数/转义字符 R”()”/using别名/模板元编程 比递归优化/智能指针/多线程/静态断言以及调试技能的要求 assert

引用包装器  std::ref(变量) #include<iostream> template<class T> void com(T arg)//模板函数,引用无效,引用包装器 { std::cout <<"com ="<< &arg << "\n"; arg++; } void main() { int count = 10; int & rcount = count; com(coun

转:探索C++0x: 1. 静态断言(static_assert)

转自:http://www.cppblog.com/thesys/articles/116985.html 简介 C++0x中引入了static_assert这个关键字,用来做编译期间的断言,因此叫做静态断言. 其语法很简单:static_assert(常量表达式,提示字符串). 如果第一个参数常量表达式的值为真(true或者非零值),那么static_assert不做任何事情,就像它不存在一样,否则会产生一条编译错误,错误位置就是该static_assert语句所在行,错误提示就是第二个参数提

C++11 特征之 静态断言

C++11 支持 静态断言,和之前的 assert 运行时断言机制形成互补 调用形式: static_assert(sizeof(int) == 4, "error: (int) size error "); 当条件不满足的时候,编译器就是提示后面的那句话 要注意的就是 静态断言条件 最好写在函数体的外面 ,这样和可以和函数调用区分开来.

boost静态断言的简单实现

boost的静态断言可以实现在编译器就检测错误的类型或语法错误,能降低运行时可能发生的错误情况,充分利用编译器提供的优势.静态断言的核心实现是通过模板的偏特化来只声明不实现,如下是我实现的一个简单的静态断言 template<bool> struct static_assert; template<> struct static_assert<true> {}; 这里实现了true模式的类实现,但是没有实现false模式的类实现,所以如果一旦条件是false,声明一个s

c语言静态断言-定义自己的静态断言

c语言里面可以自己定义静态断言,更加方便的调试代码. 使用静态断言 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<assert.h> 4 5 void main() 6 { 7 int num = 30; 8 assert(num < 20); //num<20 就是正常,否则异常 9 printf("%d",num); 10 } 用自己定义的静态断言来实现 1 #include&

C++11 静态断言(static_assert)

简介 C++0x中引入了static_assert这个关键字,用来做编译期间的断言,因此叫做静态断言. 其语法很简单:static_assert(常量表达式,提示字符串). 如果第一个参数常量表达式的值为真(true或者非零值),那么static_assert不做任何事情,就像它不存在一样,否则会产生一条编译错误,错误位置就是该static_assert语句所在行,错误提示就是第二个参数提示字符串. 说明 使用static_assert,我们可以在编译期间发现更多的错误,用编译器来强制保证一些契

c++11 静态断言

c++11 静态断言 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <vector> #include <map> void mytest() { bool flag = false; // 在程序运行阶段进行检测,如果条件为真,程序正常执行,如果为假,终止程序,提示错误 // 需要包含 assert.h 头文件,实现是一个宏,禁用断言可以使用 #