在我的程序中,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中非常常见的习语,我想知道为什么夹板会抱怨。我在FAQ或manual中找不到任何内容。
答案 0 :(得分:2)
您是否在XML_SetElementHandler()
定义的同一翻译单元(通常是.c源文件)中调用start()
?如果是这样,警告可能是正确的:将static
添加到函数定义中,并检查您的应用程序是否仍然没有错误地链接。
答案 1 :(得分:2)
'static'关键字有效地隐藏了其他翻译单元(通常是.C文件)中的函数名称。代码仍在那里,从那个C文件中你可以获得函数的地址(但不能从其他C文件中获取)。然后,您可以通过调用函数,或从函数返回地址,或将其存储在全局变量等中,将地址传递给其他翻译单元。
答案 2 :(得分:0)
我倾向于声明所有未被导出为静态的函数。我受过教育,目前认为这样做很好。 (免责声明:与大多数事情一样,这个'规则'有很多例外。)