我认为-Weffc++太吵了,没有用处。它基于过时的第一版Effective c++ ,并警告完全有效的c++结构(并且在本书的后续版本中,指南更改了这些结构)。我不想被警告我没有在构造函数中初始化std::string成员;它有一个默认构造函数,做的正是我想要的。为什么我应该写m_str()来调用它?-Weffc++警告是有用的,但编译器很难准确检测(给出假阴性),而那些没有用的警告,比如显式初始化所有成员,只会产生太多噪音,给出假阳性。
/tmp $ cat main.c
int main(int argc, char **argv) {
return 0;
}
/tmp $ gcc -Wstrict-prototypes -Wtraditional main.c
main.c: In function ‘main’:
main.c:1:5: warning: traditional C rejects ISO C style function definitions [-Wtraditional]
int main(int argc, char **argv) {
^
你可能会想“好吧,那我就用旧样式的原型吧”。不,这行不通。
/tmp $ cat main.c
int main(argc, argv)
int argc;
char **argv;
{
return 0;
}
/tmp $ gcc -Wstrict-prototypes -Wtraditional main.c
main.c:1:5: warning: function declaration isn’t a prototype [-Wstrict-prototypes]
int main(argc, argv)
^
不,不指定任何原型也是错误的,因为编译器也会报错。
/tmp $ cat main.c
int main() {
return 0;
}
/tmp $ gcc -Wstrict-prototypes -Wtraditional main.c
main.c:1:5: warning: function declaration isn’t a prototype [-Wstrict-prototypes]
int main() {
^