# 9.3. 编译器警告

以下将描述关于可以在项目选项对话第三页进行设置的编译器Compiler 警告选项。说 明取自GCC页, egcs1.1.1.版。警告warnings 本身是诊断信息，表明创建可能引起错误 errors 。

-Wall

  综合的标准的`-W'选项。

-W

  用-W编译。这已选项设置了不时很特殊的未包含在-Wall中的选项。请阅读GCC-Info 以获得更多信息。

-Wtraditional

  警告在传统或标准ANSI C中表现不同的某种构造。

-Wundef

  在一个未定义标识在一个`&#;if'指令中作出评价时警告。

-Wshadow

  无论何时当本地变量variable 隐蔽了另一个本地变量variable 时警 告。

-Wid-clash-LEN

  无论何时当两个不同标识符在第一个len字符匹配时警告。这可以帮助 你准备一个将由一定编译器Compiler s程序编译的程序。

-Wlarger-then-LEN

  无论何时当一个比LEN字节长的对象被定义时警告。

-Wpointer-arith

  警告依靠一个函数类型或空的大小的任何事物。GNU C给这些类型大小 赋值为1，为方便计算使用void * 空指针及函数指针。

-Wbad-function-cast

  无论何时当一个函数调用是用于一个不匹配类型时警告。例如，当 `int malloc()` 用于`anything *.`时警告。

-Wcast-equal

  无论何时当投出一个指针以从目标类型去除一个类型限定时警告。例如， 在一个const char *投向一个普通的char *时警告。

-Wcast-align

  无论何时当投出一个指针以使目标所要求的队列增加时警告。例如，当一 个char * 投向一个在整型只有在2或4个字节限定时才能访问的机器上的int *时警告。

-Wwrite-strings

  赋予字符串常量予char&[;length]常量类型，这样拷贝其一的地址到一个非 常量的字符*指针时会得到警告。这些警告warnings 将帮助你找到一个编译时间代码， 它可以尽力写入一个字符串常量，但只有当你在声明declaration s 及原型中使用常量时 十分仔细才可。否则，它就只是一个损害；这就是我们没有让`-Wall'请求这些警告 warnings 的原因。

-Wconversion

  当一个原型引起一个不同于没有原型时发生于同一argument的类型转换时 警告。这包含定点转换为浮点，反之亦然，及改变定点数范围和有无符号的转换，除了和缺 省的晋级一样时。

-Wsign-compare

  当有符号数转变为无符号数，而有符号和无符号的值的对比将产生一 个不正确的结果时警告。

-Waggregate-return

  当返回结构或联合的任何函数被定义或调用时警告。(在可以返回队 列的语言中，这也会引起警告。)

-Wmissing-prototypes

  如果一个全局函数定义却没有前面的原型声明declaration 时 警告。即使定义本身提纲了原型这个警告也将发出。其目的是监测头文件中未声明的全局函 数。

-Wmissing-declaration s

  当全局函数没有先声明declaration 就定义时警告，即 使定义本身提供了原型。使用这一选项来监测头文件中未声明的全局函数。

-Wredundant-decls

  当某种事物在同一范围内的声明了超过一次时警告，即使是在多声明 declaration 有效且没有改动的地方。

-Wnested-externs

  如果一个外部声明declaration 在一个函数中遇到时警告。

-Winline

  如果一个函数不能内联，而它要么声明为内部，要么给出-fin*line-functions选 项时警告。

-Wold-style-cast

  如果一个老风格(C-风格)调用用于次序时警告。

-Woverloaded-virtual

  (C++ only.) 在一个派生类中，虚拟函数的定义必须匹配在基本类 中声明的虚拟类的签名类型。当一个派生类声明一个可能是一个定义虚拟函数的错误尝试的 函数时，使用此选项来请求警告warnings ；也就是说，有和一个基本类中虚拟函数同 名的函数，但有一个不匹配任何基类中虚拟函数的类型签名时警告。

-Wsynth

  当g++综合行为不匹配c前端时警告。

make all warnings into errors

  (-Werror) 把警告warnings 看作错误 errors ；在任何警告后退出编译。

要发布你的项目, 推荐使-Wall可用。