【问题标题】:disable warning in c++在 C++ 中禁用警告
【发布时间】:2014-05-08 03:24:05
【问题描述】:

我是 C++ 新手。我正在 Qt 上编译代码源。我有这个警告:

在 ../ListAllPrsilicaCameras/main.cpp:3 中包含的文件中: 在 /usr/include/c++/4.2.1/backward/iostream.h:31 包含的文件中: /usr/include/c++/4.2.1/backward/backward_warning.h:32:2:警告:此文件至少包含一个已弃用或过时的标头。请考虑使用 C++ 标准第 17.4.1.2 节中的 32 个标头之一。示例包括将标头替换为 C++ 包含的标头,或者代替已弃用的标头。要禁用此警告,请使用 -Wno-deprecated。 [-W#warnings]

#warning 此文件至少包含一个已弃用或过时的标头。

^ 生成 1 个警告


我也收到了这些警告:

../ListCamerasProsilicaII/main.cpp:79:51: warning: unused parameter 'junk' [-Wunused-parameter]
void SetConsoleCtrlHandler(void (*func)(int), int junk)
                                                  ^
../ListCamerasProsilicaII/main.cpp:89:23: warning: unused parameter 'Signo' [-Wunused-parameter]
void CtrlCHandler(int Signo)
                      ^
../ListCamerasProsilicaII/main.cpp:140:57: warning: flag ' ' results in undefined behavior with 'u' conversion specifier [-Wformat]
                        printf("%s - %8s - Unique ID = % 8lu IP@ = %15s [%s]\n",cameraList[i].SerialString,
                                                       ~^~~~
../ListCamerasProsilicaII/main.cpp:147:57: warning: flag ' ' results in undefined behavior with 'u' conversion specifier [-Wformat]
clang++ -headerpad_max_install_names -mmacosx-version-min=10.6 -o ListCamerasProsilicaII main.o   -L/opt/local/lib/ -lPvAPI -lPvJNI -L/opt/local/lib -lJPEG -F/Users/rafikgouiaa/Qt//5.0.2/clang_64/lib -framework QtCore 
                        printf("%s - %8s - Unique ID = % 8lu (unavailable, %u)\n",cameraList[i].SerialString,
                                                       ~^~~~
../ListCamerasProsilicaII/main.cpp:152:53: warning: flag ' ' results in undefined behavior with 'u' conversion specifier [-Wformat]
                    printf("%s - %8s - Unique ID = % 8lu (*)\n",cameraList[i].SerialString,
                                                   ~^~~~
../ListCamerasProsilicaII/main.cpp:171:14: warning: unused parameter 'argc' [-Wunused-parameter]
int main(int argc, char* argv[])
             ^
../ListCamerasProsilicaII/main.cpp:171:26: warning: unused parameter 'argv' [-Wunused-parameter]
int main(int argc, char* argv[])
                         ^
7 warnings generated.

如何禁用此警告?

【问题讨论】:

  • 别做,修好! - 尤其是当“我是 C++ 新手”时
  • 修复可能是#include 而不是(!)

标签: c++ qt warnings


【解决方案1】:

重复上一个答案“答案在警告信息本身。”

"To disable this warning use -Wno-deprecated."

您可以在 Qt 项目文件 (.pro) 中添加此行来指定编译器标志:

QMAKE_CXXFLAGS += -Wno-deprecated

附:自己修复代码会更好

【讨论】:

  • 根据编译器的不同,可能还需要添加-Wno-deprecated-declarations
  • 如何打开这个 *.pro 文件? (我在我的项目结构中找不到它,它在 linux 系统中有特定的位置吗?我可以从 QT GUI 以某种方式打开它吗?)
  • @bendaf 您可以在任何文本编辑器(例如 Qt Creator)中打开它。它通常位于项目目录的根目录中
  • 谢谢@alexeibs,我发现我的问题是我打开了一个 Cmake 项目,所以我没有 qt .pro 文件,只有 CMakeLists.txt 。
【解决方案2】:

答案就在警告信息中:

编辑:

警告:此文件包含至少一个已弃用或过时的文件 标题。请考虑使用部分中的 32 个标头之一 C++ 标准的 17.4.1.2。示例包括将标头替换为 C++ 包含的标头,或者代替 不推荐使用的标头。要禁用此警告,请使用 -Wno-已弃用。 [-W#warnings]

iostream 替换iostream.h 现在C++ 的标头不再需要.h 扩展。

【讨论】:

  • 如何禁用未使用参数的警告?我编辑了我的代码
  • @phdstudent:看来您正在使用 gcc 或类似 gcc 的编译器。在这种情况下,要禁用警告,您只需在W 之后放置一个no,例如,-W-foo 变为-Wno-foo,它分别打开和关闭foo 警告名称。但是要真正了解这些内容,您应该阅读您的编译器文档/手册。
【解决方案3】:

warning: unused parameter 'argc' [-Wunused-parameter]
int main(int argc, char* argv[])
             ^
warning: unused parameter 'argv' [-Wunused-parameter]
int main(int argc, char* argv[])

更改main的定义:

int main()
{
  // ...

it's standard compliant.


warning: unused parameter 'junk' [-Wunused-parameter]
void SetConsoleCtrlHandler(void (*func)(int), int junk)

不命名参数在函数实现中也是合法的。当函数需要将参数声明为具有特定的固定签名但不需要参数时,这很有用(例如,对于派生类中的方法、回调函数或模板参数,可能会发生这种情况)。

因此,如果是这种情况,您可以更改函数定义:

void SetConsoleCtrlHandler(void (*func)(int), int)
{
  //...

如果你控制了头文件,修复它!对于您不使用的那些(系统、第 3 方库...),您可以使用 -isystem 标志(这将使它们成为“系统标头”并且 GCC/CLANG 不会为它们报告警告)。

例如

QMAKE_CXXFLAGS += -isystem ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2014-08-15
    • 2018-07-27
    • 2020-12-29
    • 2018-10-06
    相关资源
    最近更新 更多