代码之家  ›  专栏  ›  技术社区  ›  einpoklum

我如何抑制“ISO C++不支持γ-128警告”?

  •  2
  • einpoklum  · 技术社区  · 6 年前

    我正在用gcc编译代码, -Wall -Wextra -Wpedantic 开关和非扩展标准集(比如 -std=c++14 )但是-我想有一个例外和使用 __int128 这给了我一个警告:

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

    我能禁止关于 γ-128 ?或者,我可以暂时禁止 -Wpedantic 使用此类型之前和之后?

    1 回复  |  直到 6 年前
        1
  •  5
  •   einpoklum    6 年前

    如果我们咨询 documentation for -Wpedantic 我们可以注意到:

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

    快速 bit of experimentation 显示这允许您按预期定义变量,甚至在标记下:

    __extension__ __int128 hge{};
    

    当然,如果我们打算经常使用这种类型,那就相当麻烦了。使其不那么难处理的方法是使用类型别名。虽然我们在这里要小心, 这个 α-伸展节 属性必须位于 整个的 宣言 :

    __extension__ typedef __int128 int128;
    

    你可以看到它起作用了 here .


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

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

    这也 works rather well .