断言函数assert()
2018-01-31 21:39
246 查看
描述:
断言 assert 是仅在 Debug 版本起作用的宏,它用于检查“不应该”发生的情况。C 库宏 void assert(int expression) 允许诊断信息被写入到标准错误文件中。换句话说,它可用于在 C 程序中添加诊断。
声明:
下面是 assert() 宏的声明。
[cpp] view
plain copy
void assert(int expression);
参数
expression -- 这可以是一个变量或任何 C 表达式。
如果expression 为 TRUE,assert() 不执行任何动作。
如果expression 为 FALSE,assert() 会在标准错误 stderr 上显示错误消息,并中止程序执行。
返回值
这个宏不返回任何值。
实例
下面的实例演示了 assert() 宏的用法。
让我们在交互模式下编译并运行上面的程序,如下所示:
[cpp] view
plain copy
#include <assert.h>
#include <stdio.h>
int main()
{
int a;
char str[50];
printf("请输入一个整数值:");
scanf("%d", &a);
assert(a >= 10);
printf("输入的整数是:%d\n", a);
printf("请输入字符串:");
scanf("%s", &str);
assert(str != NULL);
printf("输入的字符串是:%s\n", str);
return(0);
}
[cpp] view
plain copy
请输入一个整数值: 11
输入的整数是: 11
请输入字符串: w3cschool
输入的字符串是: w3cschool
[cpp] view
plain copy
请输入一个整数值: 3
a.out: assert.c:11: main: Assertion `a >= 10' failed.
已放弃 (核心已转储)
在面试中经常用到的一个题目:
已知memcpy的函数为: void* memcpy(void *dest , const void* src , size_t count)其中dest是目的指针,src是源指针。不调用c++/c的memcpy库函数,请编写memcpy。
[cpp] view
plain copy
void* memcpy(void *dst, const void *src, size_t count)
{
//安全检查
assert( (dst != NULL) && (src != NULL) );
unsigned char *pdst = (unsigned char *)dst;
const unsigned char *psrc = (const unsigned char *)src;
//防止内存重复
assert(!(psrc<=pdst && pdst<psrc+count));
assert(!(pdst<=psrc && psrc<pdst+count));
while(count--)
{
*pdst = *psrc;
pdst++;
psrc++;
}
return dst;
}
相关文章推荐
- 断言函数assert()与ASSERT()
- assert断言函数的使用
- 断言函数assert()的使用
- C++拾遗:断言错误assert()函数用法总结
- C++中assert断言函数
- assert 断言函数/宏
- MATLAB语言中的assert断言函数
- 深入理解断言assert()函数(待整理)
- 断言函数assert()
- 断言assert()函数的使用
- assert 断言函数/宏
- assert函数(断言)
- C语言-断言之assert()函数
- STM32的断言机制——函数assert_param()
- [转]matlab语言中的assert断言函数
- 线程池创建及使用案例及调试函数assert()断言调试介绍
- Python assert 断言函数
- Python assert 断言函数
- C++ 断言assert() 函数用法
- assert()断言函数以及NODEBUG用法总结