您的位置:首页 > 其它

断言函数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 为 TRUEassert() 不执行任何动作

如果expression 为 FALSEassert() 会在标准错误 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;      

}    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: