What is &&& operation in C
Solution 1:
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’
Solution 2:
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++