异想天开

What's the true meaning of light, Could you tell me why

保持高标准的编码风格,打开警告视为错误编译选项

日期:2014-05-30 16:21:16
  
最后更新日期:2014-06-05 21:27:57
之前编译选项里面就有个Wall,打印所有的警告。项目编译后,一堆Warning,很不爽,于是,使用-Werror打开警告视为错误选项。将所有的警告给去掉。发现在这个过程中,学到不少细节。主要警告如下: [code lang="cpp"]
1. XXXX will be initialized after
[/code]
这条警告让我摸不着头脑,百度后,才知道,原来是构造函数的类成员初始化列表初始顺序与定义顺序不一致。消除警告方法:初始化列表初始顺序与定义顺序一致。

[code lang="cpp"]
2.comparison between signed and unsigned integer expressions
[/code]
这个警告没有好说的,无符号数与有符号数比较。注意有时候是因为某些运算符的运算规则导致符号有了变化。消除警告方法:视情况,统一用无符号还是有符号。

[code lang="cpp"]
3.unused variable
[/code]
定义了多余的变量。消除警告方法:去掉多余变量。

[code lang="cpp"]
4.format ‘%llu’ expects type ‘long long unsigned int’, but argument 8 has type ‘uint64_t’
[/code]
在64位机器上,uint64_t定义为long unsigned int,而32位机器上定义为long long unsigned int。有个跨平台的写法,先包含头文件:
[code lang="cpp"]
#include <inttypes.h>
[/code]
然后这样输出:
[code lang="cpp"]
uint64_t u64 = 6666;
printf("uint64: %"PRIu64"\n", u64);
[/code]
需要定义宏__STDC_FORMAT_MACROS。