【问题标题】:Why would the return type for a function be specified when it is called in C? [duplicate]为什么在 C 中调用函数时要指定函数的返回类型? [复制]
【发布时间】:2010-11-30 21:35:51
【问题描述】:

可能重复:
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);

谢谢,

斯科特

【问题讨论】:

    标签: c


    【解决方案1】:

    对于lint 和发出警告的编译器来说,这是一个古老的(而且非常令人讨厌的)技巧,用于显式标记您忽略函数返回值的意图。忘记你曾经见过它。在现代编译器上,您必须不遗余力地打开此警告,并且一些(例如 gcc)提供扩展来标记忽略返回值是危险的特定函数。

    【讨论】:

      【解决方案2】:

      他将结果强制转换为 void 以明确丢弃该值,但更常见的是摆脱有关未使用结果的警告(可能一开始不应该忽略!)

      当函数已经返回void时,再强制转换为(void)就更没有意义了。

      较旧的编译器似乎过于急于报告未使用的值 - 如今,如果您有一个确实必须检查的函数,它会使用 __attribute__((warn_unused_result)) 代替。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-20
        • 2021-01-04
        • 1970-01-01
        • 2015-12-13
        • 2012-12-04
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多