在类似情况下,有时不使用返回值会同时返回true和false

问题描述 投票:1回答:1

根据C89标准,以下代码是合法的:

A_Function_that_returns_true();

但是以下是错误的(由于未使用返回值-只需声明一个布尔变量即可解决此问题)

(5>3) && (7>6);

但是两个示例之间有什么区别?在这两种方法中,我都没有使用返回值,所以为什么一个为真而另一个为假却听起来不正确]

c function return boolean c89
1个回答
1
投票

丢弃表达式的结果并不违反C标准。问题中的两个表达式语句均未违反任何规则或约束。

编译器是否选择发出有关各种事物的有用警告是实现质量问题,不受标准约束。

调用一个函数,然后不使用其返回值通常不是问题,因为许多(当然不是全部)函数除了计算并返回值外,还执行其他操作。 (对此的正式术语是,许多功能都具有副作用。)

表达式

(5>3) && (7>6);

另一方面,完全没有用。显然,它不执行任何操作(没有副作用),因此强烈建议编译器发出警告。

如果编译器作者决定也对警告的函数返回值有所帮助,则将面临一个紧迫的问题:几乎每个C程序都包含对printf的多次调用,但不检查返回值。因此,会有太多的误报,因此警告将毫无用处。

© www.soinside.com 2019 - 2024. All rights reserved.