是否有任何工具可以在c中编译断言的编译时间?
发布时间:2020-12-16 10:16:07 所属栏目:百科 来源:网络整理
导读:我前几天在c中写了一个函数,它发生在我身上,编译器可以做更多的事情来帮助我防范错误.我的代码的基本要素是这样的 – void method(SomeType* p){ assert(p != 0); p-something();} 它被称为这样 SomeType p = NULL;if (SomeCondition){ p = some_real_value;
我前几天在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的静态分析工具可能能够检测到这些问题.
http://www.gimpel.com/html/pcl.htm 关于你的第一个例子:我的风格是赞助引用而不是指针参数或返回值,除非NULL是可接受的值.这消除了断言参数的需要!= NULL. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- flex中让火狐谷歌支持中文输入法
- 坚持使用LearnStreet Ruby培训.简单的Ruby代码
- objective-c – 什么时候调用observeValueForKeyPath?
- c# – 检查键是否是字母/数字/特殊符号
- C#语言中字符类char的使用方法(总结)
- SQLite关键字LIMIT和OFFSET
- UVa 748 / POJ 1001 Exponentiation (浮点高精度求幂&正
- c# – Entity Framework 4.3代码第一个数据库命名
- 如何从persistence.xml引用外部hibernate.cfg.xml
- 使用strcmp #define var是不是很糟糕?