夹板怎么知道我的功能没用在另一个文件中?

时间:2009-04-12 07:29:10

标签: c splint

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);
}

我甚至摆脱了主要因素,以至于它无法确定文件是否完整。我完全难过了!

4 个答案:

答案 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)

它只能报告它看到的内容。如果您比其所说的更清楚,请忽略警告或按照说明禁止警告。不要认为像这样的工具比你更了解你的程序。

如果它真的不打算在文件之外使用,你可以将它声明为静态,它应该纠正问题,但是它将无法从其他文件中访问。