C11标准定义了_Bool
类型(6.2.5.2)为标准的无符号整数类型(6.2.5.6),并且根据标准,_Bool
也是一种算术类型(通过6.2.5.7和6.2.5.17进一步确认,见6.2.5.18)。
此外,规定对于+
和-
运算符,“两个操作数都必须是算术类型,或者一个操作数必须是指向完整对象类型的指针,另一个操作数必须是整数类型”(见6.5.6.2)。
a+b
和a-b
(其中a
和b
具有类型_Bool
)的结果是否为未定义行为,还是标准清晰地定义了这些操作的结果(如果是,哪里)?注意:也许标准只将_Bool
视为非常小范围的整数。在这种情况下,我希望true
+true
等于0
(1 + 1按模2计算)。然而,GCC says 1。
_Bool
类型类似于enum
。 - Basile Starynkevitch0
或False
的值都是True
。即使是-1
也是True
。 - Tauqeer Akhtar