最近,我遇到了一个相当不寻常的编码约定,其中呼叫返回的“ void”的呼吁有(void)的前缀。

例如

(void) MyFunction();  

与函数调用有什么不同:

MyFunction();  

它是否有任何优势,还是另一个不必要的,但是有某种编码约定?

有帮助吗?

解决方案

诸如printf()之类的某些函数返回一个几乎从未在真实代码中使用的值(对于printf,打印的字符数)。但是,有些工具,例如 皮棉, ,期望,如果一个函数返回值,则必须使用它,除非您写类似的内容,否则将投诉:

int n = printf( "hello" );

使用void cast:

(void) printf( "hello" );

是一种说出此类工具的方式,您确实不想使用返回值,从而使其保持安静。如果您不使用此类工具,则不需要打扰,并且在任何情况下,大多数工具都允许您配置它们以忽略特定功能的返回值。

其他提示

不,没有任何区别 - 抛弃的是该函数的返回值。

我想说的是您想明确说明您不使用返回值(您正在为副作用打电话),但是由于功能已经具有无效的返回,因此没有多大意义。

如果函数返回某些东西,空隙可能会避免(!)警告(实际上我绝不能够使GCC警告我在某些编译器(或棉绒工具)上发出警告。但更重要的是,清楚地表明,回报值是故意“抛弃”的(而不是错误地)。

从字面上看:“函数”总是返回某些东西,否则将是一个过程。因此,本守则的作者想说:“我知道这个命名是错误的,但我不会更改名称,因此我使这种干扰可见”

它是否有任何优势,还是另一个不必要的,但是有某种编码约定?

没有不同。这是一个非常普遍的惯例,例如在软件测试中,强调了一个事实:在上下文中,函数返回(如果有的话)可以安全地丢弃。

在HPUX人页面中,在示例代码中很普遍,可以看到铸件以无效警告。

fprintf(mystream, "%s\n", "foo");

VS.

(void)fprintf(mystream, "%s\n", "foo");

那可能是代码的作者来自的地方。 IMO,这不是一个好主意,因为大多数Sprintf家族都会致电Malloc。当没有足够的内存时,malloc将失败。 Sigint还会导致基础写()Syscall中断,而不是为printf()家庭成员写所有缓冲区。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top