0

夹板给了我以下警告:

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

既然我只在这个文件上调用了夹板,它怎么知道呢?

#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 ,以至于它无法确定该文件以任何方式完成。我完全被难住了!

4

4 回答 4

2

您可能会发现,如果您包含一个声明的标题flip()- 当然,您应该这样做 - 那么splint就不会抱怨。您还应该blah()在标题中声明。

我不完全相信这是解释,因为blah()根本没有使用(尽管它使用flip()),而且您没有提到对此splint的抱怨。

但是,最好先创建每个函数(在 C 中)static,直到您可以证明在其源文件之外需要它,然后确保有一个声明函数的标头,并且该标头在文件中使用它定义了函数以及使用该函数的每个文件。

在 C++ 中,“每个函数都应该是static”的建议变成了“每个函数都应该在匿名命名空间中定义”。

于 2009-04-12T17:47:34.153 回答
1

既然我只在这个文件上调用了夹板,它怎么知道呢?

你已经回答了你的问题。您已经将一个文件输入到 lint,因此 lint知道只有一个文件需要处理(当然,标准头文件除外)。

于 2009-04-12T09:28:14.883 回答
1

int flip() 未声明为静态的,因此它可以潜在地在外部使用。由于您仅使用一个源文件调用了夹板,因此它正确地说明了您的函数,如果未在外部使用,则必须声明为静态

于 2009-04-12T10:00:26.677 回答
0

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

如果它确实不打算在文件之外使用,您可以将其声明为静态的,它应该可以解决问题,但其他文件将无法访问它。

于 2009-04-12T07:35:59.550 回答