写代码难免会有bug,所以我们会写很多Test来确保我们的代码能够正常工作。但是为什么不从源头上避免bug的发生呢?
Compiler可以帮助我们探测到很多潜在的bug,我们所要做的只是合理的设置编译参数、并充分利用C++的各种特性。
通常我们可以利用编译器提供的Syntax Check功能来检测代码,这样可以避免生成大量临时的obj文件。下面是用于代码检测的推荐编译参数。
VC8:
命令行参数
/Zc:forScope /Zc:wchar_t /Wp64 /W4 /Wall /O2 /GR /EHsc /nologo /Zs
你可以用/wd来屏蔽某些warning,比如以下的warning通常可以忽略:
4061,4365,4619,4625,4626,4668,4710,4820
Intel Compiler 10:
命令行参数
/Zc:forScope /Zc:wchar_t /Wcheck /Wport /Wp64 /W4 /Wall /O3 /GR /GX /Qms0 /nologo /Zs
你可以用/Qwd来屏蔽某些warning,比如以下的warning通常可以忽略:
383,810,981
GCC:
命令行参数
-O3 -ansi --extra-warnings -W -Wall -fsyntax-only
你可以用-W来增加额外的检查,比如下面这些:
"aggregate-return","cast-align","cast-qual","char-subscripts",
"comment","conversion","deprecated","effc++",
"float-equal","format=2","missing-format-attribute","missing-noreturn",
"old-style-cast",
"overloaded-virtual", "packed","padded",
"pointer-arith","redundant-decls","shadow","sign-promo","synth",
"trigraphs","no-unknown-pragmas","write-strings"
Compiler可以帮助我们探测到很多潜在的bug,我们所要做的只是合理的设置编译参数、并充分利用C++的各种特性。
通常我们可以利用编译器提供的Syntax Check功能来检测代码,这样可以避免生成大量临时的obj文件。下面是用于代码检测的推荐编译参数。
VC8:
命令行参数
/Zc:forScope /Zc:wchar_t /Wp64 /W4 /Wall /O2 /GR /EHsc /nologo /Zs
你可以用/wd来屏蔽某些warning,比如以下的warning通常可以忽略:
4061,4365,4619,4625,4626,4668,4710,4820
Intel Compiler 10:
命令行参数
/Zc:forScope /Zc:wchar_t /Wcheck /Wport /Wp64 /W4 /Wall /O3 /GR /GX /Qms0 /nologo /Zs
你可以用/Qwd来屏蔽某些warning,比如以下的warning通常可以忽略:
383,810,981
GCC:
命令行参数
-O3 -ansi --extra-warnings -W -Wall -fsyntax-only
你可以用-W来增加额外的检查,比如下面这些:
"aggregate-return","cast-align","cast-qual","char-subscripts",
"comment","conversion","deprecated","effc++",
"float-equal","format=2","missing-format-attribute","missing-noreturn",
"old-style-cast",
"overloaded-virtual", "packed","padded",
"pointer-arith","redundant-decls","shadow","sign-promo","synth",
"trigraphs","no-unknown-pragmas","write-strings"