根据C89标准,以下代码是合法的:
A_Function_that_returns_true();
但是以下是错误的(由于未使用返回值-只需声明一个布尔变量即可解决此问题)
(5>3) && (7>6);
但是两个示例之间有什么区别?在这两种方法中,我都没有使用返回值,所以为什么一个为真而另一个为假却听起来不正确]
丢弃表达式的结果并不违反C标准。问题中的两个表达式语句均未违反任何规则或约束。
编译器是否选择发出有关各种事物的有用警告是实现质量问题,不受标准约束。
调用一个函数,然后不使用其返回值通常不是问题,因为许多(当然不是全部)函数除了计算并返回值外,还执行其他操作。 (对此的正式术语是,许多功能都具有副作用。)
表达式
(5>3) && (7>6);
另一方面,完全没有用。显然,它不执行任何操作(没有副作用),因此强烈建议编译器发出警告。
如果编译器作者决定也对警告的函数返回值有所帮助,则将面临一个紧迫的问题:几乎每个C程序都包含对printf
的多次调用,但不检查返回值。因此,会有太多的误报,因此警告将毫无用处。