首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >splint如何知道我的函数没有在另一个文件中使用?

splint如何知道我的函数没有在另一个文件中使用?
EN

Stack Overflow用户
提问于 2009-04-12 07:29:10
回答 4查看 1.7K关注 0票数 0

Splint给了我以下警告:

代码语言:javascript
复制
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,它是怎么知道的?

代码语言:javascript
复制
#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,这样它就不能以任何方式确定文件是完整的。我完全被难住了!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-04-12 17:47:34

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

我不完全相信这就是解释,因为blah()根本没有被使用(尽管它使用了flip()),而且你也没有提到splint抱怨这一点。

但是,一种好的做法是将每个函数(在C中)设为static,直到您可以证明它在其源文件之外是需要的,然后确保有一个声明该函数的头,并且该头用于定义该函数的文件以及使用该函数的每个文件中。

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

票数 2
EN

Stack Overflow用户

发布于 2009-04-12 09:28:15

因为我只在这个文件上调用了

,它是怎么知道的?

你已经回答了你的问题。您已经向lint提供了一个文件,所以lint知道只有一个文件需要处理(当然,除了标准的头文件include之外)。

票数 1
EN

Stack Overflow用户

发布于 2009-04-12 10:00:27

int flip()没有声明为static,因此它可以潜在地在外部使用。由于您只使用一个源文件调用了splint,因此它正确地指出,如果不在外部使用函数,则必须将其声明为静态函数

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/741400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档