虽然大部分警告不会影响代码的运行(小部分可能造成影响的是类似于强制转换的警告,需要自行确保该转换有意义),但是程序员应该有义务保持代码的良好规范,以方便后续的功能迭代。
此处记录一些编译警告,不定时更新...
-Wreorder
warning: ‘xxx::xxx’ will be initialized after [-Wreorder]
- 产生原因:如果代码中成员变量的初始化顺序和它们实际执行时初始化顺序不一致,给出此警告。
- 解决办法:按声明顺序进行初始化。
warning: ‘typename xxx::xxx’ [-Wreorder]
when initialized here [-Wreorder]
- 产生原因:变量默认初始化位置不当。
- 解决办法:把构造函数里这个变量的默认初始化删掉,改为在类声明中初始化。
-Wuninitialized
warning: ‘xxx’ is used uninitialized in this function [-Wuninitialized]
- 产生原因:指针没有指向可用的内存地址或没有分配地址。
- 解决办法:为该指针分配一定的内存空间,如把
char* str;
改成char* str = oldStr;
或char* str = new char[20];
。
-Wsign-compare
warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
- 产生原因:有符号数与无符号数进行比较。
- 解决办法:把有符号数强制转换成无符号数
static_cast<unsigned long>(xxx)
,可以用typeid(xxx).name()
查看变量具体类型。