Splint给了我以下警告:
encrypt.c:4:8: Function exported but not used outside encrypt: flip
A declaration is exported, but not used outside this module. Declaration can
use static qualifier. (Use -exportlocal to inhibit warning)
encrypt.c:10:1: Definition of flip因为我只在这个文件上调用了splint,它是怎么知道的?
#include <stdio.h>
#include <stdlib.h>
int flip( int a)
{
int b;
b = a;
b ^= 0x000C;
return b;
}
int blah(int argc, char *argv[]) {
FILE *fp = NULL, *fpOut=NULL;
int ch;
ch = 20; flip(20); return (ERROR_SUCCESS);
}我甚至去掉了main,这样它就不能以任何方式确定文件是完整的。我完全被难住了!
发布于 2009-04-12 17:47:34
您可能会发现,如果包含一个声明了flip()的头--当然,您应该这样做--那么splint就不会抱怨了。您还应该在头文件中声明blah()。
我不完全相信这就是解释,因为blah()根本没有被使用(尽管它使用了flip()),而且你也没有提到splint抱怨这一点。
但是,一种好的做法是将每个函数(在C中)设为static,直到您可以证明它在其源文件之外是需要的,然后确保有一个声明该函数的头,并且该头用于定义该函数的文件以及使用该函数的每个文件中。
在C++中,“每个函数都应该是匿名的”建议变成了“每个函数都应该在匿名命名空间中定义”。
发布于 2009-04-12 09:28:15
因为我只在这个文件上调用了
,它是怎么知道的?
你已经回答了你的问题。您已经向lint提供了一个文件,所以lint知道只有一个文件需要处理(当然,除了标准的头文件include之外)。
发布于 2009-04-12 10:00:27
int flip()没有声明为static,因此它可以潜在地在外部使用。由于您只使用一个源文件调用了splint,因此它正确地指出,如果不在外部使用函数,则必须将其声明为静态函数
https://stackoverflow.com/questions/741400
复制相似问题