可能重复:
将未使用的返回值转换为void
(void)例如,在函数调用之前的目的是什么
(void)func1();
Run Code Online (Sandbox Code Playgroud)
我认为这和简单地调用一样 func1();
因此,(void)调用只是为了让其他程序员知道返回类型将被忽略,例如,如果func1()有返回类型int,或者编译器是否可能对函数执行某些优化?也许完全背后还有另一个原因 - 它甚至是合法的C++,还是在某些遗留代码中看到的C的残余.
谢谢
ben*_*bin 24
如果使用属性声明某些函数,它会阻止警告:"如果未使用/检查返回值,则发出警告"
也许是警告的重复:忽略'scanf'的返回值,使用属性warn_unused_result声明
查看gcc的文档:http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html(warn_unused_result)了解更多详情
eca*_*mur 22
在一种情况下,转换为void可以具有语义效果:其中值是逗号运算符的操作数并覆盖逗号运算符,转换为void将禁止它:
struct S {
int operator,(int) { return 0; }
};
std::cout << (S(), 42) << '\n'; // prints '0'
std::cout << ((void) S(), 42) << '\n'; // prints '42'
Run Code Online (Sandbox Code Playgroud)
这意味着很少。它显式地将行转换为 void 表达式,即仅用于其副作用且其值被丢弃的表达式。所以这些行
func1();
Run Code Online (Sandbox Code Playgroud)
和
(void)func1();
Run Code Online (Sandbox Code Playgroud)
也会做同样的事情。如果编译器知道未使用表达式的值,则可以执行一些优化,但编译器很可能可以在有或没有显式(void)的情况下弄清楚它。
它可以用作文档的一种形式,程序员试图表明他们没有使用表达式的值。