Eri*_*ric 7 c++ warnings g++ compiler-warnings
我目前有一个使用g ++编译代码的项目.我正在清理代码,我想确保所有函数都有原型,以确保正确处理const char*之类的东西.不幸的是,当我尝试指定-Wmissing-prototypes时,g ++会抱怨:
g++ -Wmissing-prototypes -Wall -Werror -c foo.cpp
cc1plus: warning: command line option "-Wmissing-prototypes" is valid for Ada/C/ObjC but not for C++
Run Code Online (Sandbox Code Playgroud)
有人能告诉我:
1)为什么gcc这个无效?这是gcc中的错误吗?
2)有没有办法打开这个警告?
编辑:
这是剪切和粘贴示例:
cat > foo.cpp <<EOF
void myfunc(int arg1, int arg2)
{
/* do stuff with arg1, arg2 */
}
EOF
g++ -Wmissing-prototypes -c foo.cpp # complains about not valid
g++ -c foo.cpp # no warnings
# Compile in C mode, warning appears as expected:
g++ -x c -Wmissing-prototypes -c foo.cpp
Run Code Online (Sandbox Code Playgroud)
AnT*_*AnT 11
编译带.cpp扩展名的文件时,默认情况下编译为C++代码.在C++语言中,函数声明的要求是强制性的硬性要求.-Wmissing-prototypes为C++ 做出选择是没有意义的.
换句话说,你不能在C++中"打开这个警告 ",因为"缺少原型" 在C++中始终是一个错误.
PS作为旁注:原型的概念仅针对C语言.C++中没有"原型".
在C语言函数声明可以是一个原型或不是原型,因此需要额外的词来区分他人的人.在C++中,函数声明总是 "原型"(从C的角度来看),因此在C++中根本不需要这个额外的术语.在C++中,函数声明只是函数声明.这就是说明了一切.
编辑:在阅读您的评论后,我得出结论,您必须误解-Wmissing-prototypes选项的含义和目的以及相应的警告.请注意,此选项不会检查您是否已将所有函数的原型包含到某个头文件中.无论您使用的是C还是C++,都无法在GCC中执行此操作.
目的-Wmissing-prototypes是不同的.此选项仅在您调用在调用时没有可见原型的函数时才有效.在C语言中这样做是合法的,但如果您在这种情况下需要警告,则使用-Wmissing-prototypes选项.在C++语言中,调用一个在调用时没有可见声明("prototype")的函数总是一个立即错误,这就是为什么C++编译器不需要这样的选项-Wmissing-prototypes.
换句话说,如果您在某个实现文件中定义了某个函数,但忘记在某个头文件中包含此函数的原型,那么在您实际尝试调用该函数之前,您将不会收到编译器的任何警告.无论您的代码是C还是C++,无论您是否使用都无关紧要-Wmissing-prototypes......在您尝试调用该函数之前,不会有任何警告.
但是一旦你尝试在没有原型的情况下调用函数,C编译器将报告一个警告(如果你使用的话-Wmissing-prototypes),C++编译器将始终报告错误.
-Wmissing-prototypes 不适用于C++,因为C++总是需要原型.
以下面的声明为例:
void foo();
Run Code Online (Sandbox Code Playgroud)
foo可以使用任何数量和类型的参数进行调用.foo不接受任何参数(如果传入任何参数,编译错误).| 归档时间: |
|
| 查看次数: |
9972 次 |
| 最近记录: |