【发布时间】:2020-03-12 04:25:08
【问题描述】:
从一些readingonStack Overflow,我推测bool,定义在stdbool.h,是一个扩展为内置类型_Bool的宏,而true是定义为1 和false 定义为0。
转换为bool 是否保证返回0 或1 的值? _Bool 变量(包括转换右值)可能会获得 0 或 1 以外的值吗?
以下代码暗示 _Bool 变量,包括转换右值,将只有 0 或 1 的值,但我想确认这是有保证的,而且我没有观察目标- 或编译器版本特定的行为。
(FWIW,我最感兴趣的是确认只有NULL,转换为_Bool,将是0,并且所有其他可能的指针值,转换为_Bool,将是@987654342 @)
$ cat ./main.c
#include <stdio.h>
#include <stdbool.h>
int main( int argc, char* argv )
{
int i;
int* p = &i;
int* n = NULL;
printf( "%zu\n", sizeof( (bool)p ) );
printf( "%p - %d\n", p, (bool)p );
printf( "%p - %d\n", n, (bool)n );
printf( "%d\n", (bool)3 );
return 0;
}
$ gcc --version
gcc (GCC) 8.2.1 20181215 (Red Hat 8.2.1-6)
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 -g ./main.c && ./a.out
1
0x7ffdac3290bc - 1
(nil) - 0
1
【问题讨论】:
-
@AlexLop。 - 确实如此,谢谢。我以为我尽职尽责地寻找相关的现有帖子,但我想答案就在那里。仍然感谢现有的答案。