相关疑难解决方法(0)

如何禁用几行代码的GCC警告

在Visual C++中,可以使用#pragma warning (disable: ...).我还发现在GCC中你可以覆盖每个文件的编译器标志.我怎样才能为"下一行"做这个,或者使用GCC围绕代码区域推送/弹出语义?

c gcc pragma compiler-warnings

200
推荐指数
8
解决办法
12万
查看次数

如何从库头中抑制GCC警告?

我有一个项目使用log4cxx,boost等库,其头文件生成大量(重复)警告.有没有办法抑制来自库包含的警告(即#include <some-header.h>)或包含某些路径?我希望像往常一样在项目代码中使用-Wall和/或-Wextra而不会隐藏相关信息.我目前在make输出上使用grep,但我想要更好的东西.

gcc warnings suppress-warnings gcc-warning

119
推荐指数
6
解决办法
4万
查看次数

只选择部分翻译单元禁用GCC警告?

与此MSVC预处理器代码最接近的GCC是什么?

#pragma warning( push )                    // Save the current warning state.
#pragma warning( disable : 4723 )          // C4723: potential divide by 0
// Code which would generate warning 4723.
#pragma warning( pop )                     // Restore warnings to previous state.
Run Code Online (Sandbox Code Playgroud)

我们在常用的标题中包含代码,我们不希望生成特定的警告.但是,我们希望包含这些标头的文件继续生成该警告(如果项目启用了该警告).

c c++ gcc pragma compiler-warnings

82
推荐指数
3
解决办法
5万
查看次数

禁用gcc中的特定警告

在Microsoft编译器上,可以使用#pragma禁用特定警告,而不禁用其他警告.如果编译器警告"必须完成"的事情,这是一个非常有用的功能.

GCC此时是否有类似功能?这似乎是一个显而易见的功能,它无法想象它还没有这个功能,但网上的旧信息表明这个功能不存在.

在GCC中使用什么?

具体来说,我喜欢使用多字符常量,比如'abc'.这些有效地评估为基数256 - 这是一个非常方便的功能,但它会触发警告.它非常便于在case语句中切换四个字符串.

gcc compiler-warnings

37
推荐指数
3
解决办法
4万
查看次数

解决C ++中的复合文字以消除警告

我正在C ++应用程序中使用libsystemd-dev(一个C库)。

我收到gcc / clang pedantic警告

复合文字是C99特定的功能

使用此代码:

#include <systemd/sd-bus.h>

void foo()
{
  sd_bus_error err = SD_BUS_ERROR_NULL;  // compound literals are a C99-specific feature
  ...
}
Run Code Online (Sandbox Code Playgroud)

查看<systemd/sd-bus.h>头文件,我看到:

typedef struct {
        const char *name;
        const char *message;
        int _need_free;
} sd_bus_error;

#define SD_BUS_ERROR_MAKE_CONST(name, message) ((const sd_bus_error) {(name), (message), 0})
#define SD_BUS_ERROR_NULL SD_BUS_ERROR_MAKE_CONST(NULL, NULL)
Run Code Online (Sandbox Code Playgroud)

这意味着我可以通过以下方式解决警告:

#include <systemd/sd-bus.h>

void foo()
{
  sd_bus_error err = {nullptr, nullptr, 0};
  ...
}
Run Code Online (Sandbox Code Playgroud)

但这是个好主意吗?如果库发生更改,我的代码也需要更改,因此我觉得它是易变的。这个警告真的有什么问题吗?有更好的解决方法吗?

总是有只使用编译器标志来禁用警告的方法,但是我想知道是否可以通过代码内鼓励的方法来解决此问题。

c++

5
推荐指数
1
解决办法
159
查看次数