什么是 C 语言中的 &&&&操作

What is &&& operation in C

本文关键字:操作 语言 什么      更新时间:2023-10-16
#include <stdio.h>
volatile int i;
int main()
{
    int c;
    for (i = 0; i < 3; i++) 
    {
         c = i &&& i;
         printf("%dn", c);
    }
    return 0;
}

使用gcc编译的上述程序的输出为

0
1
1

使用-Wall-Waddress选项,gcc发出警告:

warning: the address of ‘i’ will always evaluate as ‘true’ [-Waddress]

在上述计划中如何评估c

这是c = i && (&i);,第二部分是多余的,因为&i永远不会评估false

对于用户定义的类型,您实际上可以重载一元operator &,它可能会有所不同,但这仍然是一个非常糟糕的主意

如果您开启警告功能,则会收到类似以下内容:

警告:"i"的地址将始终评估为"true"

C 中没有&&&运算符或标记。 但是&&(逻辑"和")和&(一元地址或按位"和")运算符确实存在。

根据最大咀嚼规则,这:

c = i &&& i;

相当于这个:

c = i && & i;

如果 i&i 都为真,则它将 c 设置为 1,如果其中任何一个都为假,则设置为 0。

对于 int,任何非零值都是 true。对于指针,任何非空值都是 true(并且对象的地址始终为非空)。所以:

如果i不为零,则c设置为 1;如果i等于零,则设置为 0

这意味着&&&在这里仅用于故意混淆。分配也可以是以下任何一项:

c = i && 1;
c = !!i;
c = (bool)i;          // C++ or C with <stdbool.h>
c = i ? 1 : 0;        /* C */
c = i ? true : false; // C++