解决错误 #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)
	{
		...
	}
}
物联沃分享整理
物联沃-IOTWORD物联网 » 解决错误 #28、#29和警告 #186-D 的方法

发表评论