Невозможно вернуть bool из функции - PullRequest
2 голосов
/ 06 января 2012

Это фрагмент кода в базе C:

static bool is_ascii_value_of_digit(char ascii_value){

    if((ascii_value<40)&&(ascii_value >= 30)){
        return true;
    }
    return false;
}

Компилятор gcc студии avr выдает ошибку:

.. / calculator.h: 4:ошибка: ожидается '=', ',', ';', 'asm' или '__attribute__' before 'is_ascii_value_of_digit'

Подобные ошибки также очевидны в других функциях.Я не знаю, почему это происходит.Потратил час на выяснение причин и, наконец, сдался.Насколько я видел в Интернете, мой синтаксис не проблема.Вероятно, что-то, что я пропускаю.

Вопрос решен!

Большое спасибо за вашу быструю помощь, поскольку это сэкономило мне много времени.Я предполагал, что bool - это ключевое слово в c.

Ответы [ 4 ]

4 голосов
/ 06 января 2012

Вы, наверное, только что забыли #include <stdbool.h>.

Однако у вас есть несоответствие между именем и поведением вашей функции,

if((ascii_value<40)&&(ascii_value >= 30))

десятичные цифры, 0-9, занимают 48-57 места в таблице ASCII, это шестнадцатеричное значение 0x30 - 0x39, поэтому для соответствия имени необходимо проверить

if (ascii_value < 0x3A && ascii_value >= 0x30)
3 голосов
/ 06 января 2012

Если ваш компилятор поддерживает, хотя бы частично, стандарт C99 (или C11, но это пока маловероятно), добавьте

#include <stdbool.h>

в начало исходного файла, чтобы сделать bool, false и true видимый.

Если это не так (поддержка Microsoft для C99 не годится), обходной путь:

typedef enum { false, true } bool;

Это не вполне соответствует семантике типа C99 bool (на самом деле _Bool), но, вероятно, он достаточно близок.

Кстати, вам не нужен оператор if / else в вашей функции:

static bool is_ascii_value_of_digit(char ascii_value) {
    return ascii_value >= '0' && ascii_value <= '9';
}

bool значения являются значениями , и они могут быть сохранены и возвращены из функций, как и любые другие значения.

Еще один совет: не сравнивайте логические значенияна true или false, просто проверьте их напрямую.В условии (например, в операторе if) любое ненулевое значение считается истинным, поэтому:

if (cond == true) ...

может завершиться ошибкой, если cond имеет ненулевое значение, отличное от 1.Просто напишите:

if (cond) ...

или, чтобы проверить, ложно ли это:

if (!cond) ...

Рекомендуемое прочтение: раздел 9 comp.lang.c FAQ .(Дальнейшее рекомендуемое чтение: все остальные разделы.)

3 голосов
/ 06 января 2012

C не имеет типа bool, а также true или false. Вместо этого используйте значения int и 0 / 1.

0 голосов
/ 06 января 2012

Согласно http://computer.howstuffworks.com/c11.htm я использовал это много лет назад

#define True  1
#define False 0
typedef int boolean;

void main(void)
{
    boolean b;

    b=False;
    if(!b) printf("false");

}

В кодовой панели вывод ложен

http://codepad.org/iWKiFHFA

...