在作为参数传递函数时,解决有关“未使用”函数的夹板警告

时间:2009-01-04 21:38:48

标签: c splint

在我的程序中,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中找不到任何内容。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我倾向于声明所有未被导出为静态的函数。我受过教育,目前认为这样做很好。 (免责声明:与大多数事情一样,这个'规则'有很多例外。)