【发布时间】:2017-07-19 15:08:03
【问题描述】:
嵌入式软件开发的一些规则集和指南完全禁止递归。我将 arm-none-eabi-gcc 与基于 ARM Cortex-M4 的微控制器一起使用。
我正在寻找一个静态分析工具,它会警告我在代码中使用递归。我对这些工具的经验很少。是否可以为此使用 clang-tidy 或 clang 静态分析器?如果是,我该如何配置它们以警告递归?
(快速查看gcc option summary 告诉我,仅 gcc 无法做到这一点。)
注意:
- 请不要告诉我“只是不要递归”。代码库很大,不是我一个人。我希望能够证明其中没有递归。
(这就像说“不要取消引用空指针”。虽然没有人故意这样做,但存在工具是为了验证它不会发生。)
【问题讨论】:
-
如果您需要有人监督您的 sholder 编程,请进行同行评审。否则,就不要编写递归代码!通过设计,编译器不能警告您递归 - 除非您只使用
static函数而不使用函数指针。 -
@Olaf 如果您使用带有静态函数的递归(这是大多数时间都在执行的那种递归),它可能会警告您。
-
gcc首先是一个编译器,可以但不做一些静态分析功能。但是,有许多可用的 3rd 方静态分析工具可以生成调用图等。如果您继承或必须分析大量源代码,这将是最有用的。如果是新代码,那么设计实践和同行评审是实现它的合适方法。 -
正如所写,我认为这个问题要么太宽泛,要么要求工具推荐。当然,clang 库可用于实现静态分析,以检测 一些 递归调用。如果您有兴趣,它可能会成为一个很好的入门项目,如果您遇到麻烦,欢迎提出具体问题。
-
我不明白。你是一个人格分裂的人吗?你早上醒来,注意到你在睡觉时写了一些东西。只是不要递归。