Это правильное объявление C?Если так, то почему это не работает? - PullRequest
1 голос
/ 14 июля 2011

Я пишу демонстрационную программу из учебной книги, созданной для обучения "C" для Unix и Windows. Однако иногда я сталкиваюсь с кодом, который при точном наборе не хочет работать.

Например.

#include <stdio.h>

int main()

{
    /*This next line is the error */

    int num = 2, bool = 0;

    if ( (num==2) && (!bool) )
    {
         printf("The first test is untrue\n");
    }
    else if( (num==2) && (!bool) )
    {
         printf("The second test is true\n");
    }
    else if( (num==2) && (bool==0) )
    {
         printf("The third test is true - but unreached\n");
    }
    return 0;
}

В любом случае, как я уже упоминал в заголовке, мне любопытно, правильно ли я объявил эти переменные. Я использую ОС Windows (7).

Ответы [ 5 ]

3 голосов
/ 14 июля 2011

Я думаю, что раскраска кода в Stack Overflow действительно найдет для вас ошибку.Хотя ANSI C не имеет ключевого слова bool (хотя C99 резервирует _Bool в качестве ключевого слова), скорее всего используемый вами компилятор расширяет стандарт и определяет ключевое слово bool, тем более что оно существует в C ++ идругие языки, производные от Си.Решение простое: либо принудите ваш компилятор быть ANSI-совместимым, либо просто измените имя переменной.

3 голосов
/ 14 июля 2011

bool теперь зарезервированное слово в C ++ и не может использоваться в качестве имени переменной. Когда книга была написана, bool не был зарезервированным словом в C, и они использовали его как имя переменной int.

1 голос
/ 14 июля 2011

С компилятором C не должно быть ошибки, потому что bool не является ни типом, ни зарезервированным словом в C.

Однако с компилятором C ++ вы, вероятно, получите ошибку синтаксического анализа.

0 голосов
/ 14 июля 2011

В будущем, пожалуйста, включите точное сообщение об ошибке от компилятора, а также описание используемой среды разработки (Visual Studio, Eclipse, gcc, tcc, lcc-win и т. Д.). Это также помогло бы узнать, какую книгу вы используете; нетривиальное количество книг по программированию на C: crap .

Я подозреваю, что вы каким-то образом компилируете код как C ++, а не C, и bool - зарезервированное слово в C ++. Если вы используете Visual Studio, убедитесь, что расширение имени файла .c, а не .cpp.

0 голосов
/ 14 июля 2011

Возможно, потому что bool - это тип в компиляторе C ++, который является зарезервированным словом. Таким образом, это может зависеть от того, какой компилятор вы используете.

...