Search code examples
c++coperatorscompiler-optimizationgcc-warning

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;
}

The output of the above program compiled using gcc is

0
1
1

With the -Wall or -Waddress option, gcc issues a warning:

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

How is c being evaluated in the above program?


Solution

  • 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’