问题标签 [splint]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 为什么 Splint(C 代码检查器)在将浮点数与 int 进行比较时会出错?
两者都是数学值,但是浮点数确实具有更高的精度。这是错误的唯一原因 - 精度差异吗?还是有另一个潜在的(更严重的)问题?
c - 在作为参数传递时解决有关“未使用”函数的夹板警告
在我的一个程序中,夹板检查器警告:
使用 start()函数。该程序使用与回调一起使用的expat XML 解析器。你给解析器一个函数:
解析器在某些时候将其回调。这是 C 语言中非常常见的习语,我想知道为什么夹板会抱怨。我在常见问题解答或手册中找不到任何内容。
c - C99 中的 struct 与 ANSI-C 有什么区别?
此代码在 ANSI-C 中似乎不正确,但在 C99 中可以:
C99 和 ANSI-C 中的 struct 有什么区别?
编辑:我忘记了“a”,我的错。此代码在 C99 模式下使用 gcc 编译正常,但在 splint 上出现解析错误,已知它不支持所有 C99 扩展。
Edit2:这是 splint 的输出:
Edit3:这个文件是 eCos fileio.h(这个片段的最后一行是第 152 行):
c - 如何让夹板忽略我声明变量的位置?
你知道我怎样才能让夹板忽略我声明变量的地方吗?
我知道老派 c 告诉你在每个函数的开头声明变量,但由于我是一个坏人,我喜欢在我使用它们的地方声明东西。一个很好的例子是把 int i; 就在 for(i=0;...) 之前。
我们举一个非常简单的例子
这里夹板和大多数旧的 c 编译器都想移动 int i; 向上一行,或将 {} 放在声明和 for 循环周围。
现在的问题是,我如何关闭此检查?但是保持其他检查好?
谢谢约翰
注意 1:我已经使用 gcc 警告(见下文)作为第一道防线,而 valgrind 作为第二道防线。但是我正在考虑将夹板添加到可以控制我的愚蠢的事物列表中;-) 但是这个检查很烦人,
我使用的 gcc 警告: -Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
注意 2:我知道这种不良行为可能带来的潜在可移植性问题。但我觉得它增加了可读性,也就是不需要上下跳跃来搜索这种类型的 off 声明更有价值(我们可以在另一个线程中讨论这个)。
更新:更多信息,我将上面的代码放在一个名为 main.c 的文件中。使用的平台是 Ubuntu 8.04 和 gvim 作为编辑器,这是我运行时 splint 的输出:
这又提出了两个我以前没有考虑过的问题。
“与当前值冗余”,当前值是多少?
为什么它是解析错误而不是警告?
更新::有可能修补夹板来支持这个问题,我还没有尝试过,但我认为这是解决方案。
c - 夹板和测试覆盖率分析?
我正在寻找一种具有夹板成熟度的静态分析工具,该工具还可以对代码进行测试覆盖分析。例如,libfoo.c 中的所有非静态函数都应该存在于 libfoo.h 中,因此 libfoo.h 中的所有函数都应该有单元测试。
当然,这种行为需要某种粒度控制,但这将在静态分析工具的某种启动配置文件中定义。
我正在从事一个进展非常迅速的项目,每天都在添加各种东西,我希望找到一些有助于确保单元测试覆盖率保持足够的静态分析工具。它是一个庞大的、地理分布的团队,这意味着事情会 24/7 全天候提交,我需要每晚构建更智能。
我不需要它超级聪明,我只需要它在没有测试某些东西时破坏构建,除非它明确超出范围。
CCAN 正在研究类似的东西,但是在编写任何实质性内容之前还需要几个月的时间。我也需要一些成熟的东西。
提前感谢您提供任何宝石的链接。
c - 夹板如何知道我的函数没有在另一个文件中使用?
夹板给了我以下警告:
既然我只在这个文件上调用了夹板,它怎么知道呢?
我什至摆脱了 main ,以至于它无法确定该文件以任何方式完成。我完全被难住了!
c - 夹板的示例 rc 文件
我正在使用夹板进行代码检查,它会抛出大量警告。其中一些,我想可以忽略不计。我正在通过反复试验创建 .splintrc 。
我的问题,
是否有一些可以使用的示例 .splintrc 文件?
我正在为 C 代码使用夹板,为多任务嵌入式系统编写。
linux - 有没有办法让 Splint 或类似的静态检查器与 Linux 内核模块一起工作?
我从“ The Linux Kernel Module Programming Guide ”编译(没有警告)hello-5.c
示例,当我尝试对其进行安装时,我收到以下错误:
我想我会尝试夹板看看它是否出现任何明显的错误,但是当我运行它时,我从内核头文件中收到了一系列警告,直到它试图解析asm/types.h
所以真的有两个问题:
- 如何修复 insmod 错误?
- 如何让夹板与内核头文件配合得很好?
c - 删除 Splint 中的空警告
我一直在用我最近编写的 C 程序尝试Splint,并试图理解和删除它给出的警告。我理解但不明白如何删除它来自以下代码片段:
Splint 对函数可以返回 NULL 感到不高兴,但在这种情况下,它非常有意义。
我尝试使用 / @nullwhenfalse@ / 但它似乎只有在函数返回 true/false 并且还尝试更改代码以使用 retVal 并尝试 / @null@ / 和 / @relnull@ / 的情况下才有效声明,但这些什么也没做。
(顺便说一句,这张桌子只有 20 个大 atm,所以没有必要使用聪明的搜索算法。)
c - 用复杂的构建过程夹板整个程序
我想在我的系统上运行夹板整个程序分析。然而,系统非常大,不同的部分使用不同的编译器定义和包含路径进行编译。我可以看到如何将此信息传达给单个文件的夹板,但我不知道如何为整个程序执行此操作。有谁知道这样做的方法?