-w:关闭编译时的警告,编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的。
-Wall:编译后显示所有警告。
-W:类似-Wall,会显示警告,但是只显示编译器认为会出现错误的警告。
举例:
创建一个wall.cpp文件:
#include <stdio.h>
void main()
{
int i = 1.0*4;
return 1;
}
1、直接编译
gcc -o wall wall.c
编译结果:
wall.c: In function ‘main’:
wall.c:6:9: warning: ‘return’ with a value, in function returning void
return 1;
^
wall.c:3:6: note: declared here
void main()
^~~~
2、 -w 编译
gcc -w -o wall wall.c
编译通过,没有报任何warning
3、-W编译
gcc -W -o wall wall.c
编译结果:
wall.c: In function ‘main’:
wall.c:6:9: warning: ‘return’ with a value, in function returning void
return 1;
^
wall.c:3:6: note: declared here
void main()
^~~~
结果同直接编译一样。
4、-Wall编译
gcc -Wall -o wall wall.c
编译结果:
wall.c:3:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]
void main()
^~~~
wall.c: In function ‘main’:
wall.c:6:9: warning: ‘return’ with a value, in function returning void
return 1;
^
wall.c:3:6: note: declared here
void main()
^~~~
wall.c:5:6: warning: unused variable ‘i’ [-Wunused-variable]
int i = 1.0*4;
注:
g++编译和gcc不太一样
创建wall.cpp文件:
#include <iostream>
using namespace std;
int main()
{
int a = 1.0*4;
cout << "a:" << a << endl;
return 1;
}
g++ main函数必须是int类型,所以不做void 测试:
wall.cpp:4:11: error: ‘::main’ must return ‘int’
void main()
分别用-w -W -Wall编译均没有报warning。