目录
- 一.assert 函数简介
- 二.assert 函数使用
- 三.assert 函数用法总结与注意事项
- 四.猜你喜欢
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门
一.assert 函数简介
对于断言,相信大家都不陌生,大多数编程语言也都有断言这一特性。简单地讲,断言就是对某种假设条件进行检查。assert 宏原型定义:
//需要包含头文件 <assert.h>
#include <assert.h>
/*
描述:如果它的条件返回错误,则终止程序执行
参数:
expression : 条件判断或者表达式
*/
void assert( int expression );
assert 将通过检查表达式 expression 的值来决定是否需要终止执行程序。也就是说,如果表达式 expression 的值为假(即为 0),那么它将首先向标准错误流 stderr 打印一条出错信息,然后再通过调用 abort 函数终止程序运行;否则,assert 无任何作用。
二.assert 函数使用
/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 assert 函数
//@Time:2021/07/18 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
int main( void )
{
FILE *fp;
fp = fopen( "456.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件
assert( fp ); //所以这里不会出错
fclose( fp );
fp = fopen( "123.txt", "r" );//以只读的方式打开一个文件,如果不存在就打开文件失败
assert( fp ); //所以这里出错
fclose( fp ); //程序永远都执行不到这里来
return 0;
}
默认情况下,assert 宏只有在 Debug 版本(内部调试版本)中才能够起作用,而在 Release 版本(发行版本)中将被忽略。
三.assert 函数用法总结与注意事项
1.使用 assert 在函数开始处检验传入参数的合法性
/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 assert 函数
//@Time:2021/07/18 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/
int resetBufferSize(int nNewSize)
{
//功能:改变缓冲区大小,
//参数:nNewSize 缓冲区新长度
//返回值:缓冲区当前长度
//说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区
assert(nNewSize >= 0);
assert(nNewSize <= MAX_BUFFER_SIZE);
...
}
2.每个 assert 只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败
/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 assert 函数
//@Time:2021/07/18 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/
//错误写法
assert(a>=0 && b<=0 && c>0);
//正确写法
assert(a>=0);
assert(b<=0);
assert(c>0);
3. assert 缺点是频繁的调用会极大的影响程序的性能,增加额外的开销。
四.猜你喜欢
- C 语言 数组下标越界和内存溢出区别
- C 语言 使用指针遍历数组
- C 语言 指针和数组区别
- C 语言 指针数组和数组指针区别
- C 语言 野指针
- C 语言 函数值传递和址传递
- C 语言 函数不定长参数
- C 语言 函数指针
- C 语言 指针函数
- C 语言 回调函数 callback
- C 语言 #pragma once
- C 语言 #include <> 与 #include “” 区别
- C 语言 const 修饰函数参数
- C 语言 const 和 define 区别
- C 语言 #运算符
- C 语言 ##运算符
- C 语言 __VA_ARGS__
- C 语言 ##__VA_ARGS__
- C 语言 函数不定长参数 ##__VA_ARGS__经典案例
- C 语言 va_start 宏
- C 语言 va_end 宏
- C 语言 va_arg 宏
- C 语言 vprintf 函数
- C 语言 va_start / va_end / va_arg 自定义 printf 函数
- C 语言 main 函数
- C 语言 main 函数参数 main(int argc, char *argv[])
- C 语言 exit 函数
- C 语言 abort 函数
- C 语言 assert 函数
未经允许不得转载:猿说编程 ? C 语言 assert 函数
本文由博客 - 猿说编程 猿说编程 发布!
标签智能推荐:
C语言 abort 函数 - C语言零基础入门教程
猜你喜欢C语言数组下标越界和内存溢出区别C语言使用指针遍历数组C语言指针和数组区别C语言指针数组和数组指针区别C语言野指针C语言函数值传递和址传递C语言函数不定长参数C语言函数指针C语言指针函数C语言回调函数callbackC语言#pragmaonceC语言#include<>与#include“”区别C语言const修饰函数参数C语言const和define区别C语言#运算符C语言#
C语言 abort 函数 - C语言零基础入门教程
猜你喜欢C语言数组下标越界和内存溢出区别C语言使用指针遍历数组C语言指针和数组区别C语言指针数组和数组指针区别C语言野指针C语言函数值传递和址传递C语言函数不定长参数C语言函数指针C语言指针函数C语言回调函数callbackC语言#pragmaonceC语言#include<>与#include“”区别C语言const修饰函数参数C语言const和define区别C语言#运算符C语言#
C语言 指针函数 - C语言零基础入门教程
喜欢C语言逻辑运算符C语言三目运算符C语言逗号表达式C语言sizeof和strlen函数区别C语言strcpy和strcpy_s函数区别C语言memcpy和memcpy_s区别C语言数组定义和使用C语言数组遍历C语言数组下标越界C语言数组内存溢出C语言数组下标越界和内存溢出区别C语言二维数组定义和使用C语言二维数组行数和列数计算C语言指针声明和定义C语言指针p++/p–C语言p++/§++/_(p
C语言 __cplusplus - C语言零基础入门教程
在C文件中,经过条件编译,该段代码变成了:/**********C文件中条件编译后结果*************/void*memset(void*,int,size_t);三.猜你喜欢C语言数组下标越界和内存溢出区别C语言指针声明和定义C语言指针p++/p–C语言p++/§++/_(p++)/_p++C语言使用指针遍历数组C语言指针和数组区别C语言指针数组和数组指针区别C语言空指针NULLC语言
C语言 extern “C” - C语言零基础入门教程
在C文件中,经过条件编译,该段代码变成了:/**********C文件中条件编译后结果*************/void*memset(void*,int,size_t);三.猜你喜欢C语言数组下标越界和内存溢出区别C语言指针声明和定义C语言指针p++/p–C语言p++/§++/_(p++)/_p++C语言使用指针遍历数组C语言指针和数组区别C语言指针数组和数组指针区别C语言空指针NULLC语言
C语言 fclose 函数 - C语言零基础入门教程
喜欢C语言数组下标越界和内存溢出区别C语言使用指针遍历数组C语言指针和数组区别C语言指针数组和数组指针区别C语言野指针C语言函数值传递和址传递C语言函数不定长参数C语言函数指针C语言指针函数C语言回调函数callbackC语言#pragmaonceC语言#include<>与#include“”区别C语言const修饰函数参数C语言const和define区别C语言#运算符C语言##运
C语言 __STDC__ - C语言零基础入门教程
C程序。#ifdef__STDC__printf("标准C代码文件\n");#elseprintf("非标准C代码文件\n");#endif三.猜你喜欢C语言数组下标越界和内存溢出区别C语言指针声明和定义C语言指针p++/p–C语言p++/§++/_(p++)/_p++C语言使用指针遍历数组C语言指针和数组区别C语言指针数组和数组指针区别C语言空指针NULLC语言void指针C语言野指针C语言函数
C语言 全局变量 - C语言零基础入门教程
猜你喜欢C语言数组下标越界和内存溢出区别C语言使用指针遍历数组C语言指针和数组区别C语言指针数组和数组指针区别C语言野指针C语言函数值传递和址传递C语言函数不定长参数C语言函数指针C语言指针函数C语言回调函数callbackC语言#pragmaonceC语言#include<>与#include“”区别C语言const修饰函数参数C语言const和define区别C语言#运算符C语言#
C语言 vprintf 函数 - C语言零基础入门教程
猜你喜欢C语言数组下标越界和内存溢出区别C语言使用指针遍历数组C语言指针和数组区别C语言指针数组和数组指针区别C语言野指针C语言函数值传递和址传递C语言函数不定长参数C语言函数指针C语言指针函数C语言回调函数callbackC语言#pragmaonceC语言#include<>与#include“”区别C语言const修饰函数参数C语言const和define区别C语言#运算符C语言#
C语言 extern “C” - C语言零基础入门教程
"C"{#include<libavcodec/avcodec.h>#include<libavutil/opt.h>#include<libavutil/imgutils.h>}*/五.猜你喜欢C语言数组下标越界和内存溢出区别C语言指针声明和定义C语言指针p++/p–C语言p++/§++/_(p++)/_p++C语言使用指针遍历数组C语言指针和数组区别C语言指