该问题的答案表明,标量可以转换为_Bool
,而结果的整数值_Bool
将是0
或1
。
这个问题的公认答案指出指针是标量。
是否无法将指针隐式转换为_Bool
,因此是编译器错误?
例如:
$ cat ./main.c
// main.c
#include <stdbool.h>
int main( int argc, char* argv )
{
int i;
int* p = &i;
bool foo = (bool)p;
bool bar = p;
return 0;
}
编译器失败(其中之一):
$ /path/to/mips_fp_le-gcc --version
2.95.3
$ /path/to/mips_fp_le-gcc ./main.c
./main.c: In function `main':
./main.c:10: incompatible types in initialization
传递编译器(众多之一):
$ gcc --version
gcc (GCC) 8.3.1 20190223 (Red Hat 8.3.1-2)
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ gcc ./main.c
$
请注意,只有隐式转换,而不是强制转换(显式转换),被标记为问题编译器的错误。
另外,请注意,根据对此问题的评论,指出的问题编译器是旧的 - 从 2001 年开始 - 这可能与这是否是真正的编译器错误有关。(我无法控制的原因阻止了注意到问题交叉编译器的版本升级)