0

在我的一个程序中,夹板检查器警告:

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

4

3 回答 3

2

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

于 2009-01-04T21:49:25.150 回答
2

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

于 2009-01-04T21:59:30.340 回答
0

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

于 2009-01-05T10:05:34.447 回答