【发布时间】:2023-11-10 17:17:01
【问题描述】:
你知道如何让夹板忽略我声明变量的位置吗?
我知道老派的 c 告诉你在 从每个功能开始, 但由于我是一个坏人,我喜欢在我使用它们的地方声明一些东西。 一个很好的例子是把 int i;就在 for(i=0;...) 之前。
我们举一个很简单的例子
#include <stdio.h>
int main()
{
printf("Hello splint test\n");
int i;
for(i=5;i>0;i--)
{
printf("%2d...\n",i);
}
return 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 +gnuextensions main.c
Splint 3.1.1 --- 03 Nov 2006
Command Line: Setting +gnuextensions redundant with current value
main.c:8:8: Parse Error. (For help on parse errors, see splint -help
parseerrors.)
这又提出了两个我以前没有考虑过的问题。
“与当前值冗余”,当前值是多少?
为什么是解析错误而不是警告?
更新:: 有可能修补夹板来支持这个问题, 我还没有尝试过,但我认为这是解决方案。
【问题讨论】:
-
当您使用它时,您应该在 for 语句中声明 int。
-
您是否收到烦人的警告或解析器错误?
-
是“int”和“i”之间的空格破坏了夹板?
-
"当你这样做时,你应该在 for 语句中声明 int。"为什么?事实上,我过去曾遇到过一些编译器这样做的问题(当时这让我感到惊讶)。问题是我记不起问题了……
标签: c static-analysis c99 lint splint