Пожалуйста, скажите мне, почему это условие всегда верно - PullRequest
0 голосов
/ 16 июля 2009
enum bool{true,false};
void main()
{
    if(true==(2==3))
    {
        printf("true\n");
    }
    else
    {
        printf("false\n");
    }

    return 0;
}

Ответы [ 5 ]

12 голосов
/ 16 июля 2009

Значение enum true в этом случае равно 0.

так:

0 == (2 == 3)
0 == (0)
1

1 верно. Таким образом, это условие всегда верно.

6 голосов
/ 16 июля 2009

В вашем перечислении true имеет постоянное значение 0, а false имеет постоянное значение 1.

В C результат сравнения на равенство (2 == 3) равен либо 0 для не равных, либо 1 для равных. Ваш код:

if ( 0 == (2==3) )

или

if ( 0 == 0 )

Что явно верно.

5 голосов
/ 16 июля 2009

Это потому, что начальная точка по умолчанию для enum s в C равна 0, что ложно, а не истина.

Вы должны использовать enum bool {false, true} вместо. И, пожалуйста, не используйте мерзости как

if (x == true)
if (x == false)

вообще. Тебе было бы лучше с

if (x)
if (!x)

В любом случае, используйте true и false для установки логических значений, но вам никогда не придется проверять их таким образом. Тем более что определение ноль / не ноль, а не ноль / один.

Мне всегда нравилось (если вам действительно нужно):

#define false (1==0)
#define true  (1==1)

Это как минимум гарантированно сработает.

1 голос
/ 16 июля 2009

Потому что истина - это ложь, а ложь - это правда.

0 голосов
/ 16 июля 2009

Определение перечислений 'true' и 'false' в любом случае является плохой идеей. В C «false» равно нулю, а «true» не равно нулю ... true не обязательно равно «1».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...