0%

为什么要启用编译器警告?

❓ 我经常听到,在编译C和C++程序时,我应该always enable compiler warnings,为什么这是必要的?

有时我也听说我应该“将警告视为错误”,我该怎么做?


✔️ 众所周知,C和C++编译器在默认情况下无法报告一些常见的程序员错误,例如:

  • 忘记初始化变量
  • 忘记写函数返回值
  • printfscanf中的参数与格式字符串不匹配
  • 使用没有事先声明的函数(C中)
  • 这些warning可以被检测和报告,但通常不是默认开启;必须通过编译器选项开启此功能。

如何启用警告?这取决于您的编译器。

Microsoft C和C++编译器可以使用/W1/W2/W3/W4和/Wall之类的开关,至少请使用/W3/W4/Wall可能会在系统头文件产生伪警告,但是只要您的工程使用其中一个编译通过,就应该选择它。另外,这些选项是互斥的。

大多数其他编译器都可以使用-Wall-Wpedantic-Wextra等选项。 -Wall是必不可少的,建议使用(请注意,尽管-Wall有其名称,但它仅启用最重要的警告,而不是全部警告)。这些选项可以单独使用,也可以一起使用。

您的IDE可能可以从用户界面启用这些功能。


为什么将警告视为错误?它们只是警告?

warning表示您的代码中可能存在严重的问题,。其他可能致命也可能不会。请调查每个警告,找到根本原因,然后加以解决。如果发生错误警报,请解决它,使用其他feature或结构,以便不再触发警告。如果这很难,请逐个禁用特定警告。