7

我正在用 gcc、-Wall -Wextra -Wpedantic开关和非扩展标准集(比如说它-std=c++14)编译我的代码。但是-我想对该规则做一个例外并使用__int128. 这给了我一个警告:

warning: ISO C++ does not support ‘__int128’ for ‘hge’ [-Wpedantic]

我可以压制关于的具体警告__int128吗?或者,我可以-Wpedantic在使用这种类型之前和之后临时抑制吗?

4

1 回答 1

11

如果我们查阅文档,-Wpedantic我们可以注意到以下内容:

在后面的表达式中也禁用了迂腐警告__extension__

快速的实验表明,这允许人们按预期定义变量,即使在标志下:

__extension__ __int128 hge{};

但是,如果我们打算经常使用这种类型,那当然是相当麻烦的。使这不那么棘手的方法是使用类型别名。虽然我们在这里需要小心,__extension__属性必须在整个声明之前:

__extension__ typedef __int128 int128;

你可以看到它在这里工作。


另一种方法,一种遵循您最初的思路的方法,是在类型别名周围使用诊断编译指示:

namespace my_gcc_ints {
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
    using int128 = __int128;
#pragma GCC diagnostic pop
}

这也很好用

于 2019-02-12T11:41:34.083 回答