这是基础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中的关键字。
答案 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
类型,true
或false
。请改用int
和0
/ 1
值。
答案 2 :(得分:3)
如果您的编译器至少部分支持C99标准(或C11,但尚不可能),请添加
#include <stdbool.h>
到源文件的顶部,以显示bool
,false
和true
。
如果没有(微软对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
语句中)中,任何非零值都被视为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