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);
}
我甚至摆脱了主要因素,以至于它无法确定文件是否完整。我完全难过了!
答案 0 :(得分:2)
您可能会发现如果您包含一个声明为flip()
的标头 - 当然您应该这样做 - 那么splint
就不会抱怨。您还应在标题中声明blah()
。
我并不完全相信这是解释,因为根本没有使用blah()
(尽管它使用flip()
)并且你没有提及splint
抱怨这一点。
但是,最好先制作每个函数(在C中)static
,直到可以证明在源文件之外需要它,然后确保有一个声明函数的头,并且该标头用于定义函数的文件以及使用该函数的每个文件中。
在C ++中,'每个函数应该是static
'建议变为'每个函数都应该在匿名命名空间中定义'。
答案 1 :(得分:1)
因为我只在这个文件上调用了splint,它是如何知道的?
您已回答了您的问题。你已经将一个文件输入lint,所以lint 知道只有文件需要处理(当然除了标准的标题包括之外)。
答案 2 :(得分:1)
int flip()未声明为静态,因此可以在外部使用。由于您只使用一个源文件调用了splint,因此它正确地说您的函数(如果不在外部使用)必须声明为static
答案 3 :(得分:0)
它只能报告它看到的内容。如果您比其所说的更清楚,请忽略警告或按照说明禁止警告。不要认为像这样的工具比你更了解你的程序。
如果它真的不打算在文件之外使用,你可以将它声明为静态,它应该纠正问题,但是它将无法从其他文件中访问。