为什么在C中调用函数时会指定函数的返回类型?

时间:2010-11-30 21:35:51

标签: c

  

可能重复:
  Need for prefixing a function with (void)…

您好,

我正在使用一些C代码,作者使用了我不熟悉的语法。通过以下对函数的调用:

(void) msleep(&gActivationCount, NULL, PUSER,
    "com_apple_dts_kext_KauthORama.RemoveListener", &oneSecond);

似乎作者正在将返回值转换为void或只是简单地说明函数原型(我说可能因为我无法将函数解析为它的原型),对于返回值说。这不等于:

msleep(&gActivationCount, NULL, PUSER,
    com_apple_dts_kext_KauthORama.RemoveListener", &oneSecond);

谢谢,

斯科特

2 个答案:

答案 0 :(得分:4)

对于lint和发出警告的编译器,这是一个陈旧的(并且非常讽刺)技巧,明确标记您忽略函数返回值的意图。忘了你曾经看过它。在现代编译器中,你必须不遗余力地打开这个警告,有些(例如gcc)提供扩展来标记忽略返回值是危险的特定函数。

答案 1 :(得分:3)

他将结果转换为void以明确丢弃该值,但更常见的是删除对未使用结果的警告(首先可能不应该忽略!)

当函数已经返回void时,转换为(void)更加毫无意义。

旧的编译器似乎过于急于报告未使用的值 - 现在,如果你有一个真正必须检查的函数,它需要__attribute__((warn_unused_result))