的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)
你有什么建议吗?
什么编译错误?从什么代码?什么运行时错误? – Mat 2013-03-13 10:06:24
什么汇编命令?哪些图书馆被链接?它应该是'uint128_t'而不是'__uint128_t'与'#include'或更好'#include '(在C++中) –
2013-03-13 10:10:49
@BasileStarynkevitch有趣的是,我似乎无法让'uinit128_t'在Live Work Space上的任何编译器上工作,尽管他们都接受'__uint128_t',这个以前的帖子似乎表明它是实验性的和平台相关的http://stackoverflow.com/a/11660651/1708801 – 2013-03-13 12:27:17