函数调用之前(void)
的目的是什么,例如
(void)func1();
我认为这与简单地调用func1();
因此(void)
调用只是让其他程序员知道返回类型将被忽略,例如func1()
的返回类型为int
,或者编译器可能对函数执行一些优化?也许完全背后还有另一个原因 - 它甚至是合法的C ++,还是在某些遗留代码中看到的C的残余。
由于
答案 0 :(得分:24)
如果使用属性声明某些函数,它会阻止警告:“如果未使用/检查返回值,则发出警告”
可能是Warning: ignoring return value of 'scanf', declared with attribute warn_unused_result
的副本查看gcc:http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html(warn_unused_result)的文档以获取更多详细信息
答案 1 :(得分:4)
这意味着很少。它明确地将该行转换为void表达式,该表达式仅用于其副作用并且其值被丢弃。所以行
func1();
和
(void)func1();
会做同样的事情。如果编译器知道没有使用表达式的值,可能会执行一些优化,但很可能编译器可以使用或不使用explicit(void)来计算它。
它可以用作文档的一种形式,程序员试图明确表示他们没有使用表达式的值。
答案 2 :(得分:3)
另一个奇怪的用途是允许将未知返回类型的函数作为序列运算符与,
运算符相邻使用。也就是decltype( f(), g() )
技术,您想说“f
可以使用()
进行操作,g
可以使用g()
,我希望此类型是f()
{1}}返回“。但是,如果operator,
返回的类型导致decltype( void(f()), g() )
重载,则结果将是意外的。
所以你做f()
,并在调用operator,
之前丢弃{{1}}的返回值,因此你可以保证得到内置的序列运算符而不是某些未知的覆盖类型。