【发布时间】:2012-12-06 22:20:45
【问题描述】:
例如在函数调用前(void)的作用是什么
(void)func1();
我认为这与简单地调用func1(); 相同
因此,(void) 调用只是为了让其他程序员知道返回类型将被忽略,例如,如果 func1() 的返回类型为 int,或者编译器是否可能对函数执行一些优化?也许它背后还有另一个原因——它甚至是合法的 C++,还是它是在某些遗留代码中看到的 C 的残余。
谢谢
【问题讨论】:
-
casting unused return values to void 的可能重复项,以及许多其他问题...无论如何,我认为程序员不应该为了让 他们的 编译器满意而在代码中添加垃圾因为 they 会出现 that 编译器支持的无用和/或愚蠢的警告。关于“明确表示我们不关心表达式的结果”,好吧,这不是很明显,因为我们没有对它做任何事情吗?
-
@effeffe 这不是垃圾,这不是程序员告诉编译器闭嘴。这是一个程序员告诉代码的读者:“我知道这个函数会返回一些东西,但我不在乎”。与
func1();相反,这意味着“要么我知道这个函数返回了一些东西,我不在乎,要么我忘记正确处理返回类型并造成致命错误”。出于同样的原因,关于未处理返回类型的编译器警告永远不会是无用/愚蠢的。 -
@Lundin 所以你通常写
(void) printf("hello");? -
@effeffe 这是一个愚蠢的例子,因为它是一个众所周知的函数。 (void) 语法是您在处理用户定义的函数、API/库函数等时应该使用的语法。无论如何,您可能不应该在生产代码中使用 stdio.h,因此您可以决定在仅发布版本。
-
@Lundin 嗯,我不喜欢我的代码风格选择不一致,但这只是个人喜好问题。我更愿意认为人们在使用函数之前阅读文档,但是您的选择是有道理的,尽管我认为大多数人这样做/这样做是为了关闭编译器(事实上,这个问题及其重复项中的几乎每个答案都这么说)。