C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了是否有任何工具可以在c中编译断言的编译时间?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我前几天在c中写了一个函数,它发生在我身上,编译器可以做更多的事情来帮助我防范错误.我的代码的基本要素是这样的

void method(SomeType* p)
{
    assert(p != 0);
    p->something();
}

它被称为这样

SomeType p = NULL;
if (someCondition)
{
    p = some_real_value;
}

method(p);

很明显,p在运行时可能为null,因此在调试版本中对方法的断言失败.我的错.

但是,似乎有可能编译器可能在编译时捕获到它并发出警告,说它已检测到它已发现可能违反断言的可能性.

好的,这是一个简单的案例,编译器根据程序的某些流程分析和跟踪每个点的可能变量范围,发现指针在该点可能是NULL是相当简单的.

我知道确定是否会违反许多断言可能太难了,但即使是很少次编译器能够告诉我,我编写的代码可能会违反断言,这将有助于我程序更安全.

我认为它可以帮助处理数组索引中的一个错误,例如在循环中: –

assert(index >= 0 && index < array_sizE);

我想在许多情况下编译器可以在编译时证明索引变量可能超出这些边界并在编译时发出警告.

我意识到,对于编译器而言,这可能是一项太多的工作,但也许有一些工具可以执行这种分析?我一直无法找到谷歌的任何东西,但我想知道这种类型是否存在?或者是否太难以做得好或许有用?

解决方法

诸如PC-lint的静态分析工具可能能够检测到这些问题.
@L_618_10@

关于你的一个例子:我的风格是赞助引用而不是指针参数或返回值,除非NULL是可接受的值.这消除了断言参数的需要!= NULl.

大佬总结

以上是大佬教程为你收集整理的是否有任何工具可以在c中编译断言的编译时间?全部内容,希望文章能够帮你解决是否有任何工具可以在c中编译断言的编译时间?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。