我们知道任何不等于0的数字在C中都被视为true,因此我们可以这样写:

int a = 16;

while (a--)
    printf("%d\n", a);  // prints numbers from 15 to 0

然而,我想知道C中的true/false是否定义为1/0,所以我try 了下面的代码:

printf("True = %d, False = %d\n", (0 == 0), (0 != 0));  // prints: True = 1, False = 0

C标准是否明确指出真值和假值分别为10

推荐答案

C标准是否明确指出truefalse的真值分别为01

C标准将truefalse定义为stdbool.h中的宏,这两个宏分别扩展到10.

C11-§7.18:

其余三个宏适用于#if个预处理指令.他们是

true

扩展到整数常数1

false

它扩展为整数常量0[…]

对于操作员==!=,标准说

C11-§6.5.9/3:

==(等于)和!=(不等于)运算符类似于关系运算符,只是它们的优先级较低.如果指定的关系为真,则每个运算符产生1,如果指定的关系为假,则每个运算符产生0.结果类型为int.对于任何一对操作数,恰好有一个关系为真.

C++相关问答推荐

如何将匿名VLA分配给指针?

为什么在传输 Big Data 时共享内存段的运行时间比管道更长?

如何将FileFilter添加到FileDialog GTK 4

InetPton()函数无效的IP地址

字符数组,字符指针,在一种情况下工作,但在另一种情况下不工作?

什么C代码将确定打开的套接字正在使用的网络适配器?

Ebpf内核代码:permission denied:invalid access to map value

为什么输出不是从上到下C

为什么双重打印与C中的float具有不同的大小时具有相同的值?

将整数的.csv文件解析为C语言中的二维数组

Win32API Wizzard97 PropSheet_SetWizButton不工作

我怎么才能用GCC编译一个c库,让它包含另一个库呢?

整型文字后缀在左移中的用途

C I/O:在Windows控制台上处理键盘输入

可变宏不能编译

如何使用空元素块声明指针数组

CS50 pset 5的皱眉脸正确地处理了大多数基本单词,并且拼写判断不区分大小写.

某些EAX值的不同调用方的CPUID结果不一致

正在try 理解C++中的`正在释放的指针未被分配‘错误

计算时出现奇怪的计算错误;N Select K;在C中