是非常积极的

时间:2015-12-14 17:17:43

标签: c

我想声明unsigned int是严格正的。我在以下两个选项之间进行辩论:

unsigned int i = 1;
assert(i > 0); /*option 1*/
assert(i != 0); /*option 2*/

我发现自己处于Buridan's ass两难境地。是否有理由更喜欢一个而不是另一个?

3 个答案:

答案 0 :(得分:6)

assert(i > 0);对于i检查正整数并包括i = 0的情况的其他程序员来说更具可读性。

注意:正如Joachim所指出的comment,如果在{{1}定义了宏NDEBUG,请记住最后包含,宏assert()不生成任何代码,因此根本不执行任何操作。

答案 1 :(得分:3)

我更喜欢

assert(i > 0); /*option 1*/

有两个原因。

首先,这是一个较少的角色,角色需要花钱。

其次,如果你的意图是显示数字是严格正数,即使不知道我是无符号整数,这也很清楚。

答案 2 :(得分:2)

两者肯定会生成相同的代码,因此无论如何传达整体功能的目标是更好的选择:

unsigned int i = ...;
assert(i > 0); /*option 1*/
assert(i != 0); /*option 2*/

选项1在大多数情况下效果更好,因为它是一个积极的断言:价值应该是什么,不应该是什么。通常这更容易理解。此外,当测试i的算术性质时,这是可行的方法。

i仅用于零或非零时,选项2在有限的情况下效果更好 - 特别是如果它是算术值无关的逻辑位的集合。