Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

#include <stdio.h>

volatile int i;

int main()
{
    int c;

    for (i = 0; i < 3; i++) 
    {
         c = i &&& i;
         printf("%d
", 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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
719 views
Welcome To Ask or Share your Answers For Others

1 Answer

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’


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share

548k questions

547k answers

4 comments

86.3k users

...