解决错误 #28、#29和警告 #186-D 的方法
error: #28: expression must have a constant value
表达式必须有一个常量值
问题代码
void Example(uint8_t cycle)
{
...
static uint8_t level=cycle/100;
...
}
位于静态存储区的变量不支持定义时使用变量赋初值,这意味着下面代码是合法的
void Example(uint8_t cycle)
{
...
uint8_t level=cycle/100;
...
}
error: #29: expected an expression
期望表达式
#29报错是比较常见的报错,一般是语法问题,与之相配套的可能会有#65,检查一下报错位置的语法问题。例如:
#define sda_high() Gpio_Set(SDA_NUMBER,SDA_PIN)
#define sda_Low () Gpio_Reset(SDA_NUMBER,SDA_PIN)
另外一种比较隐性的是MDK编译器,默认编译时支持C90标准,有时需要在设置里打开C99标准
魔术棒—C/C+±–C99 Mode
warning: #186-D: pointless comparison of unsigned integer with zero
无符号整数与零的无意义比较
比较低级的问题了,无符号整数没有负数,该条件会恒为真,例如
void Exzample(uint8_t array)
{
if(array>=0)
{
...
}
}
一般出现这种问题是范围判断,书写时有可能不会注意到这个问题。例如
void Exzample(uint8_t array)
{
if(0<=array && array<=60)
{
...
}
}