解决有关功能的夹板警告“未使用”而它们作为参数传递

StackOverflow https://stackoverflow.com/questions/411726

  •  03-07-2019
  •  | 
  •  

在我的节目中,夹板检查员发出警告:

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中非常常见的习语,我想知道为什么夹板会抱怨。我在常见问题解答手册

有帮助吗?

解决方案

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

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top