无法从功能返回bool

时间:2012-01-06 00:14:14

标签: c function boolean

这是基础C中的一段代码:

static bool is_ascii_value_of_digit(char ascii_value){

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

avr studio gcc编译器给我错误:

  

../ calculator.h:4:错误:在'is_ascii_value_of_digit'之前预期'=',',',';','asm'或'__attribute__'

类似的错误在其他功能中也很明显。我不知道为什么会这样。花了一个小时弄清楚为什么,最后放弃了。据我在网上看到,我的语法不是问题。可能是我忽略的东西。

问题已解决!

非常感谢您的快速帮助,因为它为我节省了很多时间。我假设bool是c中的关键字。

4 个答案:

答案 0 :(得分:4)

您可能刚忘记#include <stdbool.h>

但是,您的功能的名称和行为之间存在不匹配,

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

十进制数字0-9占据ASCII表格中的位置48-57,即十六进制0x30 - 0x39,所以为了匹配名称,你应该测试

if (ascii_value < 0x3A && ascii_value >= 0x30)

答案 1 :(得分:3)

C没有bool类型,truefalse。请改用int0 / 1值。

答案 2 :(得分:3)

如果您的编译器至少部分支持C99标准(或C11,但尚不可能),请添加

#include <stdbool.h>

到源文件的顶部,以显示boolfalsetrue

如果没有(微软对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值是,它们可以像其他值一样存储和返回。

另一个指南:不要将布尔值与truefalse进行比较,只需直接测试它们即可。在条件(例如在if语句中)中,任何非零值都被视为true,因此:

if (cond == true) ...
如果cond的值不是1,则

可能会失败。只需写下:

if (cond) ...

或者,为了测试它是否为假:

if (!cond) ...

推荐阅读:comp.lang.c FAQ的第9部分。 (进一步推荐阅读:所有其余部分。)

答案 3 :(得分:0)

根据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");

}

在键盘输出中为false

http://codepad.org/iWKiFHFA