最近我遇到了一种非常不寻常的编码约定,即调用返回“void”的函数时,前缀为(void)。
例如:
(void) MyFunction();
这与函数调用有何不同?
MyFunction();
它有什么优势吗?还是说它只是另一种不必要的编码约定?
最近我遇到了一种非常不寻常的编码约定,即调用返回“void”的函数时,前缀为(void)。
例如:
(void) MyFunction();
MyFunction();
一些函数,如printf(),返回一个几乎在实际代码中从未使用的值(在printf的情况下,是打印的字符数)。然而,一些工具,如lint,期望如果函数返回一个值,它必须被使用,并且除非你编写类似以下内容的代码,否则会发出警告:
int n = printf( "hello" );
(void) printf( "hello" );
在编程中,使用“废弃(deprecated)”一词是告诉工具你真的不想使用返回值,从而让它们保持安静。如果你不使用这样的工具,你就不需要去理会,而且无论如何大多数工具都允许你配置它们忽略特定函数的返回值。
fprintf(mystream, "%s\n", "foo");
对比。
(void)fprintf(mystream, "%s\n", "foo");
这可能是代码作者的出发点。在我看来,这不是一个好主意,因为大多数 sprintf 系列函数都会调用 malloc,当内存不足时,malloc 会失败。SIGINT 也会导致底层的 write() 系统调用被中断,并且不能完全写入缓冲区,对于 printf() 系列函数而言。