断言 assert(表达式) 相关概念

news/2024/9/28 5:22:18 标签: null, 编译器, 测试, c
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_views" class="htmledit_views">

class="MsoNormal" style="margin: 0cm 0cm 0pt;">color: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">来自:color: navy; font-family: 黑体; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;" lang="EN-US">ccolor: navy; font-family: 黑体; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;">和指针.P342

class="MsoNormal" style="margin: 0cm 0cm 0pt;">

class="MsoNormal" style="margin: 0cm 0cm 0pt;">color: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">断言就是声明某种东西应该为真。color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">ANSI C color: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">实现了一个color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">assertcolor: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">宏࿰c;它在调试程序时很有用。它的原型如下所示:color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">

class="MsoNormal" style="margin: 0cm 0cm 0pt;">color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">void assert( int expression );

class="MsoNormal" style="margin: 0cm 0cm 0pt;">color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US"> 

class="MsoNormal" style="margin: 0cm 0cm 0pt;">color: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">当它被执行时࿰c;这个宏对表达式参数进行class="tags" href="/tags/CeShi.html" title=测试>测试。如果它的值为假࿰c;它就向标准错误打印一条诊断信息并终止程序。这条信息的格式是由class="tags" href="/tags/BianYiQi.html" title=编译器>编译器定义的࿰c;但它将包含这个表达式所在的源文件的名字以及断言所在的行号。如果表达式为真࿰c;它不打印任何东西࿰c;程序继续执行。用这种方法使用断言使调试程序变得更容易࿰c;因为一旦出现错误࿰c;程序就会停止。而且࿰c;这条错误提示信息会准确地提示了症状出现的地点。color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">

class="MsoNormal" style="margin: 0cm 0cm 0pt;">color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US"> 

class="MsoNormal" style="margin: 0cm 0cm 0pt;">color: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">这个宏提供了一种方便的方法࿰c;对应该为真的东西进行检验。例如:如果一个函数必须使用一个不能为color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">NULLcolor: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">的指针参数进行调用࿰c;那么函数可以用断言验证这个值:“color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">assert( value != NULL );color: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">”color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;"> color: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">如果函数错误的接受了一个color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">NULLcolor: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">参数࿰c;程序就会打印一条类似下面形式的信息:color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">

class="MsoNormal" style="margin: 0cm 0cm 0pt;">color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">Assertion failed: != NULL, file.c line 214

class="MsoNormal" style="margin: 0cm 0cm 0pt;">color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US"> 

class="MsoNormal" style="margin: 0cm 0cm 0pt;">color: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">当程序被完整的class="tags" href="/tags/CeShi.html" title=测试>测试完毕之后࿰c;你可以在编译时通过定义color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">NDEGUG color: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">消除所有的断言。你可以使用color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">-DNDEBUGcolor: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">class="tags" href="/tags/BianYiQi.html" title=编译器>编译器命令行选项color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;"> color: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">或者color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;"> color: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">在源文件中头文件color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">assert.hcolor: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">被包含之前增加下面这个定义color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">:

class="MsoNormal" style="margin: 0cm 0cm 0pt;">color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">#define NDEBUG

class="MsoNormal" style="margin: 0cm 0cm 0pt;">color: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">当color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">NDEBUGcolor: #333399; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">被定义之后࿰c;预处理器将丢弃所有的断言࿰c;这样就消除了这方面的开销࿰c;而不必从源文件中把所有的断言实际删除。color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US">

class="MsoNormal" style="margin: 0cm 0cm 0pt;">color: #333399; font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial;" lang="EN-US"> 

class="MsoNormalTable" style="margin: auto auto auto 5.4pt; border-collapse: collapse; mso-border-alt: dashed silver .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt dashed silver; mso-border-insidev: .5pt dashed silver;" border="1" cellspacing="0" cellpadding="0">
ckground: #f8f8f8; padding-bottom: 0cm; width: 509.15pt; padding-top: 0cm; height: 69.25pt; mso-border-alt: dashed silver .5pt; border: silver 1pt dashed;" width="679">

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">#include<stdio.h>

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">#include<string.h>

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: #333399; font-family: Verdana;" lang="EN-US">//#define NDEBUG

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">#include<assert.h>

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US"> 

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US"> 

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">void my_strcopy( char * dest,cerun: yes;">  char * src )

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">{

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">cerun: yes;">    assert( srccerun: yes;">  != NULL );

class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 14.75pt; line-height: 10pt; mso-line-height-rule: exactly; mso-char-indent-count: 1.96;">color: purple; font-family: Verdana;" lang="EN-US">assert( dest != NULL );

class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 14.75pt; line-height: 10pt; mso-line-height-rule: exactly; mso-char-indent-count: 1.96;">color: purple; font-family: Verdana;" lang="EN-US">assert( strlen(src) >= strlen(dest) );

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US"> 

class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 14.75pt; line-height: 10pt; mso-line-height-rule: exactly; mso-char-indent-count: 1.96;">color: purple; font-family: Verdana;" lang="EN-US">while( (*dest++ = *src++) != '/0' );

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">}

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US"> 

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">int main()

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">{

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">cerun: yes;">    char str1[] = "0123456789";

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">cerun: yes;">    char str2[] = "abcdefghijk";

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US"> 

class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 14.75pt; line-height: 10pt; mso-line-height-rule: exactly; mso-char-indent-count: 1.96;">color: purple; font-family: Verdana;" lang="EN-US">printf("cerun: yes;">    color: purple; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">原始字符串:color: purple; font-family: Verdana;" lang="EN-US">/n%s/n%s/n",str1,str2);

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">cerun: yes;">    my_strcopy( str1, str2 );

class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 14.75pt; line-height: 10pt; mso-line-height-rule: exactly; mso-char-indent-count: 1.96;">color: purple; font-family: Verdana;" lang="EN-US">printf("color: purple; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;">拷贝后的字符串:color: purple; font-family: Verdana;" lang="EN-US">/n%s/n%s/n",str1,str2);

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US"> 

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">cerun: yes;">    getchar();

class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 14.75pt; line-height: 10pt; mso-line-height-rule: exactly; mso-char-indent-count: 1.96;">color: purple; font-family: Verdana;" lang="EN-US">return 0;

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 10pt; mso-line-height-rule: exactly;">color: purple; font-family: Verdana;" lang="EN-US">}

cle>

http://www.niftyadmin.cn/n/873655.html

相关文章

什么是标准预定义宏

ANSIC标准定义了以下6种可供C语言使用的预定义宏&#xff1a;---------------------------------------------------------------------------- 宏 名 作 用---------------------------------------------------------------------------- __LINE_…

Typedef相关概念

C语言支持一种叫做typedef的机制&#xff0c;它允许你为各种数据类型定义新的名字。typedef声明的写法和普通的声明基本相同&#xff0c;只是让typedef这个关键字出现在声明的前面。例如&#xff0c;下面这个声明&#xff1a; char *ptr_to_char; 把变量ptr_to_char声明为一个…

= 不同于 ==

来自&#xff1a;c缺陷与陷阱1.1节 当形如e1 e2这样的表达式出现在语句的条件判断部分时&#xff0c;有些编译器会给出警告消息。当确实需要对变量进行赋值并检查该变量是否为0时&#xff0c;为了避免来自编译器的警告&#xff0c;我们不应该简单的关闭警告选项&#xff0c;而…

python ip代理池维护_python爬虫011-IP代理池的维护-(2)获取模块-代理66、快代理、旗云代理...

最近突然有所松懈&#xff0c;突然间变得好累。早上起不来&#xff0c;上午没精神&#xff0c;下午没体力&#xff0c;晚上没效率。学习的动力似乎突然消失。我怎么了&#xff1f;似乎是休息方面除了问题&#xff0c;持续一个多月的学习&#xff0c;没有运动过&#xff0c;更别…

整数溢出

来自&#xff1a;C缺陷与陷阱3.9节 c语言中存在两类整数算术运算&#xff0c;有符号运算与无符号运算。在无符号算术运算中&#xff0c;没有所谓的“溢出”一说&#xff1a;所有的无符号运算都是以2的n次方为模&#xff0c;这里的n是结果中的位数。如果算术运算符的一个操作数为…

不是方阵有逆矩阵吗_人工智能数学基础----矩阵

人工智能数学基础----矩阵人工智能数学基础系列文章1. 人工智能数学基础----导数2. 人工智能数学基础----矩阵3. 人工智能数学基础----线性二阶近似 今天复习矩阵&#xff0c;作为程序员&#xff0c;矩阵在程序中的应用想必或多或少都接触过&#xff0c;特别是在图像变化算法上…

返回整数的getchar函数

来自&#xff1a;C缺陷与陷阱5.1节我们首先看下面的这个例子&#xff1a; #include <stdio.h> int main() { char c; /* 改成&#xff1a;int c 就正确了 */ while( ( c getchar() ) ! EOF ) { putchar( c ); } return 0; } getchar函…

软件项目管理实践之日计划

软件项目管理实践之日计划 袁光东 原创如何提高项目的生产率&#xff0c;保证项目按期交付是每个软件开发项目经理都需要面对的难题。关于这方面的研究&#xff0c;在《人月神话》、《人件》等书籍都有很详细的论述。研究表明&#xff0c;不同程序员之间的生产率最高差别在40倍…