感谢WhirlWind和paxdiablo的回答和评论。这是我试图把这些部分放在一个完整的(?)答案中。
-Wunused-result
是相关的gcc选项。并且它默认打开。从gcc warning options page报价:
-Wno-unused-result
如果标记属性warn_unused_result
(见 Variable Attributes)函数的调用者不使用其返回值时不发出警告。缺省值为-Wunused-result
因此,解决方案是在该函数上应用warn_unused_result
属性。
下面是一个完整的例子。该文件的unused_result.c
int foo() { return 3; }
int bar() __attribute__((warn_unused_result));
int bar() { return 5; }
int main()
{
foo();
bar(); /* line 9 */
return 0;
}
和相应的编译的结果内容:再次
$gcc unused_result.c
unused_result.c: In function ‘main’:
unused_result.c:9: warning: ignoring return value of ‘bar’, declared with attribute warn_unused_result
注意没有必要已经-Wunused-结果,因为它是默认的。有人可能会试图明确提及它来传达意图。虽然这是一个高尚的意图,但在分析了这种情况之后,我的选择将会与此相反。因为在编译选项中有-Wunused-result
可能会产生错误的安全/满意感,这是不正确的,除非代码库中的功能都使用warn_unused_result
限定。
+1,但请记住该函数必须对其应用warn_unused_result属性。 – paxdiablo 2010-05-20 02:31:30