Q我遇到了一些代码,其中包含一个(void)之前加上一个强制类型转换printf。这是为什么?
A printf确实会返回值(打印的字符数,或错误代码),尽管很少有程序会检查每次调用的返回值。由于某些编译器(和lint)会警告已丢弃的返回值,因此明确地转换为(void)是一种说法:“是的,我已决定忽略此调用的返回值,但请继续警告我其他(可能无意中)被忽略的返回值。” 也经常使用void类型转换来调用strcpy和strcat,因为返回值从不令人意外。
参考文献:K&R2 第 A6.7 节,第 199 页
Rationale 第 3.3.4 节
H&S 第 6.2.9 节,第 172 页;第 7.13 节,第 229-30 页