2013-03-13 71 views
-1

的Linux 2.6.32int128 Linux上的英特爾編譯器的

英特爾編譯器: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):錯誤:一個以上的操作者「< < 「匹配這些操作數:

 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(code 2)

你有什麼建議嗎?

+7

什麼編譯錯誤?從什麼代碼?什麼運行時錯誤? – Mat 2013-03-13 10:06:24

+1

什麼彙編命令?哪些圖書館被鏈接?它應該是'uint128_t'而不是'__uint128_t'與'#include '或更好'#include '(在C++中) – 2013-03-13 10:10:49

+0

@BasileStarynkevitch有趣的是,我似乎無法讓'uinit128_t'在Live Work Space上的任何編譯器上工作,儘管他們都接受'__uint128_t',這個以前的帖子似乎表明它是實驗性的和平臺相關的http://stackoverflow.com/a/11660651/1708801 – 2013-03-13 12:27:17

回答

0

至於1)和2)我所讀的一切基本上都說這是experimental and platform dependent。儘管@Basile建議它應該是uint128_t我找不到編譯器Intelgccclang,但它們只支持__uint128_t,您可以在Live Work Space處嘗試各種編譯器。這是my attempt在這個問題。

至於3)似乎沒有支持__uint128_t這些流的版本,因爲它是實驗性的,也許應該是令人驚訝的。此前線程how to print __uint128_t number using gcc?顯示了一些替代方案。

你有什麼理由不去探索一些Bigint庫嗎?

+0

我需要正確的內置int128 for AtomicObject – Alex 2013-03-13 13:22:55