【发布时间】:2011-07-08 16:02:57
【问题描述】:
偶然发现了一个失败的断言,因为它将 false 与函数的返回类型进行比较,因为函数本身返回了一个布尔值,并且断言不仅检查了值,还检查了返回值的类型以匹配那个为假,以保证返回一个布尔值。 现在的问题是,C99 将 bool 定义为 _Bool 并且 _Bool 甚至不一定与 int 大小相同(实际上,根据我的经验,在当今的大多数平台上,它通常与 unsigned char 大小相同),更不用说相同了type (这实际上是不可能的,因为 _Bool 是 C99 中语言的内置类型),但将 false 和 true 定义为 0 和 1 没有任何类型转换,并且没有类型转换的预处理器定义将默认为 int。 如果 C99 将 false 和 true 定义为 ((bool)0) 和 ((bool)1),那么无论 _Bool 是如何定义的,它们都将始终是 bool 类型。 那么是否有充分的理由将它们始终定义为 int,即使 bool 在该平台上不是 int 或者这只是语言中的一个错误,应该用 C1x 修复?
【问题讨论】:
标签: c language-design c99 boolean