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

如何在没有编译器警告的情况下执行可移植的64位算术

  •  16
  • user180326  · 技术社区  · 14 年前

    我偶尔在我的开源C++库中使用64位算术。我发现了 long long 非常符合我的目的。即使是10年前的Solaris设备也可以编译它。而且它也可以在不干扰Windows上定义的情况下工作。

    现在的问题是,我收到了来自我的用户的投诉,因为他们使用gcc-教育设置编译,gcc坚持发出警告 长-长 不是C++标准的一部分。这可能是对的,但我对C++标准本身并不太感兴趣,我只是希望我的代码能够尽可能多地在编译器上工作。

    所以我的问题是双重的:

    • 有谁能说出不支持64位长CL的实际C++编译器吗?
    • 有没有一种方法可以使GCC编译64位算术(在32位平台上)而不出现编译器警告?(stdint.h没有帮助,因为它还取决于 长-长 )

    附笔。

    如果有平台的长线长度变为128位或更大,这很有趣,但对我来说不是问题。

    7 回复  |  直到 13 年前
        1
  •  16
  •   Steve Jessop    14 年前

    long long

    <sys/types.h> int64_t g++ -pedantic

    -pedantic

        2
  •  12
  •   Clifford    14 年前

    -Wno-long-long

    -std=C++0x

        3
  •  5
  •   Community CDub    8 年前

    __extension__

    // No '-pedantic' warning/error.
    __extension__ long long foo = 2;
    
    // Exhibits '-pedantic' warning/error.
    long long bar = 3
    

    $ g++ -pedantic -fsyntax-only foo.cpp
    foo.cpp:5: error: ISO C++ 1998 does not support 'long long'
    

    long long -pedantic @Steve Jessop's suggestion int64_t

        4
  •  4
  •   zwol    14 年前

    -Wno-long-long -pedantic

        6
  •  1
  •   Philipp    14 年前

    #include "boost/cstdint.hpp"
    boost::int64_t my_64_bit_number;
    

        7
  •  0
  •   Brian    14 年前

    long long bigint