不过令我们头疼的是当编译程序时出现的一大堆错误及警告信息,虽然大多数问题好解决,不过也有一些错误或者警告让我们抓耳挠腮无所适从。所以这里我就列出IAR一些常见的错误和警告信息所代表的意思及相应的处理方法,希望能对正在使用IAR的同志们有所帮助。另外本信息表主要是我在逛阿莫论坛时看到的,也没有原作者相应的信息,所以无法在这里感谢了,也因此我以“经验笔记”的形式写出来(当然也有自己的一些批注)。下面我挑了一些重点的列出来并加以注释,具体原版信息表见文章最后的附件:
一、警告信息表:
1.Macro "name" redefine(宏被重新定义)
表示用#define定义的宏在程序中以不同形式的参数或者形式重新定义了。
2.undeclared function parameter "name"; assumed "int"(为声明的函数参数“name”,假设为“int”型)
缺省情况下,函数定义头部中未声明的标识符默认为“int”型。
3.unreferenced label "name"(未引用的标号“name”)
这个貌似最常遇到的警告之一了,常常我们定义了某个变量,但在程序中却没有使用它。
4.unreachable returns, the function will never return.(不能到达的返回,即执行不到RET指令,函数不能返回)
函数永远不能返回到调用的函数中,这可能是程序设计的bug造成的。当然如果是RTOS的话,这点是正常的,无需考虑,因为操作系统每一个任务就是无限循环。
5.Floating point constant out of range.(浮点常数超出范围)
浮点值太大或者太小以致于不能使用目标的浮点系统来表示。
... ...
二、错误信息表:
1.Invalid syntax(无效的语法)
系统编译器不能识别的语法,语句不符合标准。
2.Failed to open #include file "name"(打开头文件失败)
这也是比较常见的错误,编译器在编译程序的时候找不到文件里包含的头文件,可能头文件不存在或者路径不对等等。
3.member "name" of "struct" or "union" redeclared(结构体或者联合体成员变量被重新声明)
这个错误也是比较常犯的,因忘记了在结构体后者联合体中已经定义的变量,而在程序主体之中又重新定义或者声明了这个变量。
4.‘; ’ expected(忘记语句结束符'; ')
这个貌似是最常见的错误了吧,估计好多新手都犯过这个错误,养成一个语句结尾都要加‘; '的好习惯是你从菜鸟迈向大牛很重要的一步。
5.“else” without preceding “if”(“else”没有前导的“if”)
过多或者杂乱的使用if...else嵌套容易造成此类错误,常常丢三落四,所以养成好的编程风格和习惯可以避免此类错误。
... ...
错误和警告的类型很多很多,我这里列出来的只是冰山之一角了,如果想要深入了解的见附件,未完待续~
附件为IAR编译错误信息表和警告信息表。
附件:http://www.ippipp.com/file/id/25864。