解决有关“未使用”功能的夹板警告 当它们作为参数传递时
在我的程序中,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 语言中非常常见的习惯用法,我想知道为什么 splint 会抱怨。 我在 常见问题解答 或 手册。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您是否在定义
start()
的同一翻译单元(通常是 .c 源文件)中调用XML_SetElementHandler()
? 如果是这样,则警告可能是正确的:将static
添加到函数定义中,并检查您的应用程序是否仍然链接而没有错误。Do you call
XML_SetElementHandler()
in the same translation unit (normally the .c source file) in whichstart()
is defined? If so, the warning might be correct: Addstatic
to the function definition and check if your application still links without errors.“static”关键字有效地对其他翻译单元(通常是.C 文件)隐藏了函数的名称。 代码仍然在那里,从该 C 文件中您可以获取该函数的地址(但不能从其他 C 文件中获取)。 然后,您可以通过调用函数、从函数返回地址、或者将其存储在全局变量中等方式将地址传递给其他翻译单元。
The 'static' keyword effectively hides the name of a function from other translation units (.C file, usually). The code's still there, and from that C file you can get the address of the function (but not from other C files). You can then pass the address to other translation units, either by calling functions, or returning the address from a function, or by storing it in a global variable, etc.
我倾向于声明所有未导出为静态的函数。 我接受过教育,目前相信这样做是很好的做法。 (免责声明:与大多数事情一样,这条“规则”也有很多例外。)
I tend to declare all functions which are not being exported as static. I have been taught and currently believe that it is good practice to do so. (Disclaimer: As with most things, there are numerous exceptions to this 'rule'.)