最近开始写博客了,而且总会有人问一些编译警告,错误怎么回事,怎么修改的问题,于是决定开始认真总结平时遇到的相关问题。今天就开始慢慢积累总结吧,也建议大家平时养成总结的好习惯,即使从现在开始也不晚。好的开始等于成功了一半。
1、error: invalid operands to binary - (have 'unsigned int' and 'char *')
说明:二元减法运算的操作数无效。
2、warning: array subscript has type 'char'
说明:这个warning是说,数组的下标被定义成char型了,由于char型有可能是负数,因 此会产生难以 预料的错误。
修改:把 char 修改 unsigned char 型
3、warning:dereferencing pointer 'IpAddr.38' does break strict-aliasing rules
说明:Strict aliasing 是C或C++编译器的一种假设:不同类型的指针绝对不会指向同一块内存区域。
举例说明:
uint32_t IpAddr;
strcat(p, inet_ntoa(*(struct in_addr *)&IpAddr));
修改方法:
uint32_t IpAddr;
struct in_addr IpAddrEx;
struct in_addr IpAddrEx;
strcat(p, inet_ntoa(IpAddrEx));
4、warning: no newline at end of file
说明:在文件最后一行加上回车键,c/c++代码的每一行后面有一个“结束符”,也就是newline。避免当被include的文件展开后, 前一个文件的最后一行与后一个文件的第一行直接被连接成一行从而造成错误。
5、warning: assignment discards qualifiers from pointer target type
说明:赋值时,取消了右值的限定。一般是左右值不匹配,例如 char = unsigned char;
warning: comparison is always false due to limited range of data type
说明:由于类型限制,比较一直是假
6、warning: comparison is always true due to limited range of data type
说明:由于数据类型范围的限制,比较结果一直为真。比如 unsigned int 一直大于 0
7、warning: return makes pointer from integer without a cast
说明:return使integer转换为pointer,没有加强制类型转换。
8、warning: initialization from incompatible pointer type
说明:不兼容指针类型的初始化
9、warning: initialization discards qualifiers from pointer target type
说明:initialization取消了指针目标类型的限定。
10、warning: assignment from incompatible pointer type
说明:不兼容的指针间赋值
11、warning: passing argument 1 of 'mes_read_time' discards qualifiers from pointer target type12、
说明:mes_函数第一个参数的传递,丢弃了指针目标类型限定。
12、warning: 'return' with a value, in function returning void
说明:在void返回类型的函数中,return返回值。同样 int Func();函数没有返回值,都是错误的。
13、Waring:backslash and newline separated by space
说明:因为\ 后面多了一个空格.发生在宏写错时。
14、error: a label can only be part of a statement and a declaration is not a statement
switch(a)
{
<span style="white-space:pre"> </span>case 1:
<span style="white-space:pre"> </span>int id = 0;....................
<span style="white-space:pre"> </span>....................
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>case 2:
<span style="white-space:pre"> </span>break;
}
case1:
//case语句中不能再声明变量,如果声明变量可以使用括号括起来。
15、warning: declaration of 'tb' shadows a global declaration
说明:出现这种警告的时候,查看您的变量声明与函数参数中的名字是否相同,修改为不同的名字既可解决。
16、warning: this decimal constant is unsigned only in ISO C90
1 在常数后面增加一个UL标识,或者ULL表示,如4294967295UL,这样就不会报警了
2 使用十六进制的数字,如0xFFFFFFFF
3 使用gcc -std=c99 用99标准来编译
PS:今天暂时写到这里,以后遇到问题随时更新。