************************************************
keil中警告:invalid multibyte character sequence
************************************************
方案一:#pragma diag_suppress 870用这个办法,这个可以解决,关闭
方案二:是数组里面是汉字就会出现
应该是数据类型定义的问题。 检查下两种类型的差别,修正下变量类型。
应该是数据类型定义的问题。
问题到了,不知怎么搞得,这个字摸的.c文件中的汉字编码和其他文件的不一样,
一般在keil中删除一个汉字都要按退格键两下才删除一个汉字,这个文件中居然按一下就删掉了,也没
出现乱码字样。重新建了一个.c文件,把代码拷过去,
然后就没再报错了~
************************************************
line 10: warning: function declared implicitly  函数的隐式声明
************************************************
这是由于没有声明函数原型造成的。
__DSB 函数在声明处需要加上extern修饰符把,否则编译器会认为的重定义。
【note】stm32 keilMDK出现warning: function XX declared implicitly .
2014-08-26 14:50 985人阅读 评论(0) 收藏 举报
warning: #223-D: function "CLR_TX_DATA" declared implicitly
解决方法。 编译器错误
以上面错误提示为例:
1  到定义函数 CLR_TX_DATA() 的源文件 ,这里假设在 a.c  中;
2  在 a.h 中最后声明一下 CLR_TX_DATA(),即添加(假设此函数无返回值无参数) 
                    void  CLR_TX_DATA(void);
3  再次编译 刚才的 warning  即可消失。
参考自
KEIl编译STM32的时候,出现了一点问题!!
程序编译的时候通过了!!但是显示警告:
test.c(45): warning:  #223-D: function "Get_Temp"declaredimplicitly
这是因为Get_Temp没有在你所引用的文件里加载,虽然你在头文件里声明了一遍!!
你只需要在你所使用的文件里面在声次,问题迎刃而解!!
今天在EINT的范例里添加了一个函数,即eint.c中添加了一个datawrite()的函数,并在主函数main.c
中调用,编译便警告
warning: #223-D: function "datawrite()" declared implicitly
很奇怪,在eint.c中也有初始化函数EINTInit()同样在main.c中调用没有问题,问什么偏偏这个不行。
但毕竟是个警告,还不是错误,
while(1)
  {
    FIO1SET = 1<<19;
  delaySysTick(10);
  Data_write(0xff00, 0xff);
  FIO1CLR = 1<<19;
  delaySysTick(10);
  }
看来这个警告还是不能回避的,在网上差了下,有类似问题说是库的原因,具体是什么也没说清楚。于
是尝试着一一打开库文件,打开eint.h,恍然大悟,这里赫然写着
extern void EINT0_IRQHandler(void) __irq;
extern DWORD EINTInit( void );
原来在这里将eint.c中的函数与main.c相关联,也就是在eint.c中添加了新函数,还有在这里声明调用
才行。
eint.h中,添加
extern void Data_write(WORD addr, BYTE data);
即可
在做数据处理的时候,出现warning: #223-D: function "abs" declared implicitly
添加:float abs(float __x);//防止abs warning, 原因不明确, 可能是math.h与stdlib.h中都有abs
()吧,用stdlib.h替换math.h也可解决问题
1.warning: #550-D: variable "d" was set but never used
描述:变量'd'定义但从未使用,或者是,虽然这个变量你使用了,但编译器认为变量d所在的语句没有意义
,编译器把它优化了.
解决:仔细衡量所定义的变量d是否有用,若是认定变量d所在语句有意义,那么尝试用volatile关键字修
饰变量d,若是真的没有用,那么删除掉以释放可能的内存.
2.warning: #1-D: last line of file ends without a newline
描述:文件最后一行不是新的一行.编译器要求程序文件的最后一行必须是空行,想了半天没想通为什么
要这样.
解决:可以不理会.若是觉得出现警告不爽,那么在出现警告的文件的最后一行敲个回车,空出一行.
3. warning: #111-D: statement is unreachable
描述:声明不可能到达.多出现在这种场合:
int main(void)
{
...
while(1) //无限循环,这在不使用操作系统的程序中最常见
{
...
}
return 0; //这句声明在正常情况下不可能执行到,编译器发出警告
}
解决:不理会.
4. warning: C3017W: data may be used before being set
描述:变量'data'在使用前没有明确的赋值.如:
uint8 i,data; //定义变量i和data,二者都没有明确赋值
for ( i = 0; i < 8; i++) //变量'i'在语句中被赋值0
{
if ( IO1PIN & SO_CC2420 )
data |= 0x01; //变量'data'在使用前没有明确赋值,编译器发出警告
else
data &= ~0x01;
}
解决:应仔细衡量该变量的初始值是否为0,若是,可以不理会这个警告,因为MDK编译器在程序执行前,会
将使用到的数据区初始化为0,但若是该变量的初始值不应该是0,忽略这个警告可能会引起致
命错误.这
个警告应引起足够重视.应养成变量赋初值的习惯,好在有编译器给把关.
5. warning: #177-D: variable "temp" was declared but never referenced
描述:变量'temp'进行了声明但没有引用.多出现在声明了一个变量,但却没有使用它,它和warning:
#550-D: variable "temp" was set but never used不同之处在于temp从没有使用过.
解决:若是定义的变量确实没有用,删除掉;若是有用,则在程序中使用.
与该警告类似的还有 warning: #177-D: function "MACProcessBeacon" was declared but never
referenced
6. warning: #940-D: missing return statement at end of non-void function
"DealwithInspect2"
描述:返回非空的函数"DealwithInspect2"的最后缺少返回值声明.如:
int DealwithInspect2(uint32 test)
{
...
...
...
//此处应该是return x;返回一个int型数据,若是没有返回值,编译器产生警告
}
7.
1. error: #65: expected a ";"
描述:缺少分号.大多是漏忘';'.
解决:双击错误行,在定位到错误点的附近到没加';'号的语句,加上分号.并不一定在定位到的错误行