[英]What is &&& operation in C
#include <stdio.h>
volatile int i;
int main()
{
int c;
for (i = 0; i < 3; i++)
{
c = i &&& i;
printf("%d\n", 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。 对于指针,任何非null值都为true(并且对象的地址始终为非null)。 所以:
它设置c
为1,如果i
是非零,或者0
,如果i
是等于零。
这意味着&&&
在这里被用于故意混淆。 作业也可以是以下任何一种:
c = i && 1;
c = !!i;
c = (bool)i; // C++ or C with <stdbool.h>
c = i ? 1 : 0; /* C */
c = i ? true : false; // C++
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.