苏州新闻,seo sem是什么职位,seo排名推广工具,做游戏网站多钱我一直在学习 OpenCV 教程#xff0c;遇到了assert函数;它做什么#xff1f;
assert将终止程序#xff08;通常带有引用 assert 语句的消息#xff09;#xff0c;如果其参数为 false。它通常在调试过程中使用#xff0c;以使程序在发生意外情况时更明显地失败。
例如遇到了assert函数;它做什么
assert将终止程序通常带有引用 assert 语句的消息如果其参数为 false。它通常在调试过程中使用以使程序在发生意外情况时更明显地失败。
例如
assert(length 0); // die if length is negative.如果失败您还可以添加要显示的更多信息
assert(length 0 Whoops, length cant possibly be negative! (didnt we just check 10 lines ago?) Tell jsmith);或者像这样
assert((Length cant possibly be negative! Tell jsmith, length 0));当您进行发布非调试构建时您还可以通过定义NDEBUG宏来消除评估assert语句的开销通常使用编译器开关。
// BAD
assert(x);
// GOOD
assert(x);
x;
// Watch out! Depends on the function:
assert(foo());
// Heres a safer way:
int ret foo();
assert(ret);从程序调用 abort和不保证做任何事情的组合来看断言应该只用于测试开发人员假设的事情而不是例如用户输入数字而不是字母应该通过其他方式处理。
assert计算机语句类似于英文语句make sure。
看看
assert() example program in C
许多编译器提供了一个 assert () 宏。如果其参数评估为 TRUE则 assert () 宏返回 TRUE如果评估为 FALSE则采取某种操作。许多编译器会在失败的 assert () 上中止程序其他人会抛出异常
assert宏的一个强大功能是如果未定义 DEBUG预处理器将其折叠成完全没有代码。在开发过程中这是一个很大的帮助当最终产品发布时没有性能损失也没有增加程序的可执行版本的大小。
Eg
#include stdio.h
#include assert.h
void yze (char *, int);
int main(void)
{char *string ABC;int length 3;yze(string, length);printf(The string %s is not null or empty, and has length %d \n, string, length);
}
void yze(char *string, int length)
{assert(string ! NULL); /* cannot be NULL */assert(*string ! \0); /* cannot be empty */assert(length 0); /* must be positive */
}
/**************** Output should be similar to ******************
The string ABC is not null or empty, and has length 3assert () 函数可以诊断程序 bug在 C 中它是在assert.h中定义的在 C 中它是在cassert中定义的它的原型是
void assert(int expression);参数表达式可以是任何你想测试的东西 — — 一个变量或任何 C 表达式。如果 expression 的计算结果为 TRUEassert () 什么也不做。如果 expression 的计算结果为 FALSEassert () 在 stderr 上显示错误消息并中止程序执行。
您如何使用 assert它最常用于跟踪程序错误与编译错误不同。错误不会阻止程序编译但会导致程序给出错误的结果或运行不当例如锁定。例如您正在编写的财务分析程序可能偶尔会给出错误的答案。您怀疑问题是由变量 interest_rate 在负值上引起的。
assert (interest_rate gt; 0);在程序中使用 interest_rate 的位置。如果变量变为负数则 assert () 宏会向您发出警报。然后您可以检查相关代码以查找问题的原因。
要查看 assert () 的工作原理请运行下面的示例程序。如果输入非零值程序将显示该值并正常终止。如果输入零assert () 宏将强制异常程序终止。您看到的确切错误消息将取决于您的编译器但这是一个典型示例
断言失败x文件 list19_3.c第 13 行注意为了使 assert工作您的程序必须在调试模式下编译。有关启用调试模式的信息请参阅编译器文档稍后说明。当您稍后在发布模式下编译最终版本时将禁用 assert宏。 int x;printf(\nEnter an integer value: );scanf(%d, x);assert(x 0);printf(You entered %d.\n, x);return(0);输入整数值:10
你输入了 10。
输入整数值:-1
错误信息程序异常终止
您的错误消息可能会有所不同具体取决于您的系统和编译器但总体思路是相同的。