What is &&& operation in C

后端 未结 2 1261
没有蜡笔的小新
没有蜡笔的小新 2020-12-07 09:47
#include 

volatile int i;

int main()
{
    int c;

    for (i = 0; i < 3; i++) 
    {
         c = i &&& i;
         printf(\"%d\\n\"         


        
相关标签:
2条回答
  • 2020-12-07 10:23

    There is no &&& operator or token in C. But the && (logical "and") and & (unary address-of or bitwise "and") operators do exist.

    By the maximal munch rule, this:

    c = i &&& i;
    

    is equivalent to this:

    c = i && & i;
    

    It sets c to 1 if both i and &i are true, and to 0 if either of them is false.

    For an int, any non-zero value is true. For a pointer, any non-null value is true (and the address of an object is always non-null). So:

    It sets c to 1 if i is non-zero, or to 0 if i is equal to zero.

    Which implies that the &&& is being used here just for deliberate obfuscation. The assignment might as well be any of the following:

    c = i && 1;
    c = !!i;
    c = (bool)i;          // C++ or C with <stdbool.h>
    c = i ? 1 : 0;        /* C */
    c = i ? true : false; // C++
    
    0 讨论(0)
  • 2020-12-07 10:39

    It's c = i && (&i);, with the second part being redundant, since &i will never evaluate to false.

    For a user-defined type, where you can actually overload unary operator &, it might be different, but it's still a very bad idea.

    If you turn on warnings, you'll get something like:

    warning: the address of ‘i’ will always evaluate as ‘true’

    0 讨论(0)
提交回复
热议问题