Linux for Intel编译器上的int128

时间:2013-03-13 10:05:02

标签: c++ linux intel icc int128

Linux 2.6.32

英特尔编译器:icpc版本13.0.1(gcc版本4.4.6兼容性)

#include <iostream>
#include <sys/types.h>
int main()
{
    std::cerr << sizeof (__uint128_t) << std::endl;     
    return 0;
}

输出:16

因此,存在__uint128_t类型 但是,使用__uint128_t会产生编译和运行错误。

程序:

// File int01.cpp
#include <cstdint>
int main()
{
uint128_t val128 = 0;
return 0;
}


// File int02.cpp
#include <cstdint>
int main()
{
__uint128_t val128 = 0;
return 0;
}


// File int03.cpp
#include <iostream>
#include <cstdint>
int main()
{
__uint128_t val128 = 0;
std::cerr << val128 << std::endl;
return 0;
}

汇编:

  

icpc int01.cpp

/ usr / include / c ++ / 4.4.6 / c ++ 0x_warning.h(31):灾难性错误:#error指令:此文件需要编译器和库支持即将推出的ISO C ++标准C ++ 0x。此支持目前是实验性的,必须使用-std = c ++ 0x或-std = gnu ++ 0x编译器选项启用。   #error这个文件需要编译器和库支持即将到来的\    ^

int01.cpp(代码4)

的编译中止
  

icpc int01.cpp -std = c ++ 0x

int01.cpp(4):错误:标识符“uint128_t”未定义     uint128_t val128 = 0;     ^

int01.cpp(代码2)

的编译中止
  

icpc int02.cpp -std = c ++ 0x

//没有错误

  

icpc int03.cpp -std = c ++ 0x

int03.cpp(6):错误:多个运算符“&lt;&lt;”匹配这些操作数:

        function "std::basic_ostream<_CharT, _Traits>::operator<<(long) [with _CharT=char, _Traits=std::char_traits<char>]"
        function "std::basic_ostream<_CharT, _Traits>::operator<<(unsigned long) [with _CharT=char, _Traits=std::char_traits<char>]"
        function "std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT=char, _Traits=std::char_traits<char>]"
        function "std::basic_ostream<_CharT, _Traits>::operator<<(short) [with _CharT=char, _Traits=std::char_traits<char>]"
        function "std::basic_ostream<_CharT, _Traits>::operator<<(unsigned short) [with _CharT=char, _Traits=std::char_traits<char>]"
        function "std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT=char, _Traits=std::char_traits<char>]"
        function "std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT=char, _Traits=std::char_traits<char>]"
        function "std::basic_ostream<_CharT, _Traits>::operator<<(long long) [with _CharT=char, _Traits=std::char_traits<char>]"
        function "std::basic_ostream<_CharT, _Traits>::operator<<(unsigned long long) [with _CharT=char, _Traits=std::char_traits<char>]"
        function "std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT=char, _Traits=std::char_traits<char>]"
        function "std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT=char, _Traits=std::char_traits<char>]"
        function "std::basic_ostream<_CharT, _Traits>::operator<<(long double) [with _CharT=char, _Traits=std::char_traits<char>]"
        operand types are: std::ostream << __uint128_t
std::cerr << val128 << std::endl;
          ^

int03.cpp(代码2)

的编译中止

你有什么建议吗?

1 个答案:

答案 0 :(得分:0)

至于1)和2)我读到的所有内容基本上都是experimental and platform dependent。虽然@Basile建议它应该是uint128_t我找不到支持Intel以外的任何内容的编译器gccclang__uint128_t,但您可以尝试Live Work Space的各种编译器。这个问题是my attempt

至于3)似乎没有这些流的版本支持__uint128_t,因为它是实验性的,或许应该是令人惊讶的。之前的帖子how to print __uint128_t number using gcc?显示了一些替代方案。

你有没有理由不去探索一些Bigint库?