2009-01-04 7 views
0

在我的节目中,splint检查警告:解决有关职能的夹板警告“未使用”,而他们作为参数传递

expat-test.c:23:1: Function exported but not used outside expat-test: start 
    A declaration is exported, but not used outside this module. Declaration can 
    use static qualifier. (Use -exportlocal to inhibit warning) 
    expat-test.c:38:1: Definition of start 

的start()函数是用来。该程序使用expat XML分析器,该分析器与回调协同工作。你给解析器一个函数:

XML_SetElementHandler(parser, start, end); 

和解析器在某些点回调它。这是一个非常常见的C语言,我想知道为什么夹板抱怨。我在FAQmanual中找不到任何东西。

回答

2

你是否在start()定义的同一翻译单元(通常是.c源文件)中调用XML_SetElementHandler()?如果是这样,警告可能是正确的:将static添加到函数定义,并检查您的应用程序是否仍然没有错误链接。

+0

感谢,开始()函数确实是在同一个文件,并添加“静态”解决了这个问题。夹板现在很高兴,应用程序仍然有效。 – bortzmeyer 2009-01-04 21:56:27

+0

我刚刚注意到,夹板的警告信息提供了一个关于“静态”的提示。对我感到羞耻。 – bortzmeyer 2009-01-04 21:57:29

2

'static'关键字有效地隐藏了来自其他翻译单元(通常为.C文件)的函数名称。代码仍然存在,从该C文件中可以获取函数的地址(但不能从其他C文件中获取)。然后,您可以通过调用函数,或者,或者通过将其存储在一个全局变量的函数返回地址等

0

通过地址转换的其他单位我倾向于声明哪些没有被导出的所有功能作为静态。我已经受过教育,目前相信这样做是一种好的做法。 (免责声明:与大多数事情一样,也有很多例外“规则”)

相关问题