草庐IT

c++ - gcc 在 abs 函数上的奇怪行为

我将一些代码从windows(vs2010)移植到gcc它的一部分看起来像:doubler1/*=somevalue*/;doubler2/*=somevalue*/;doublediff=abs(r1-r2);std::cerr它使用-Wall-Wextra在gcc(arm-linux-gnueabihf-g++(Raspbian6.3.0-18+rpi1+deb9u1)6.3.020170516)上编译,没有警告。结果是:0.121,0.0709839,00.015,0.131958,00.015,0.00799561,00.21,0.00799561,00.182,0.20599

c++ - 更新 Apple g++/gcc

Applegcc和GNUgcc有什么区别?Applegcc是标准gcc的超集吗?我的OSX中的g++版本信息显示:$g++--versioni686-apple-darwin11-llvm-g++-4.2(GCC)4.2.1(BasedonAppleInc.build5658)(LLVMbuild2335.15.00)根据this,C++11的一些最新功能在gcc4.3/4.4中.有没有我可以升级到的更新版本的Applegcc。如果是这样,我该怎么做?我有Xcode4.1 最佳答案 嗯,对于第一部分,Apple在这种情况下使用g++

c++ - 使用(自定义)GCC 4.x 或 5.x 时,Boost 构建无法通过 C++11 功能检查

我需要在Fedora24机器上构建Boost1.62和1.63,但使用GCC4.9.3或GCC5.4.0(取决于CUDA版本,这就是我需要旧编译器的原因)。但是如果我按照thisanswer中的描述设置自定义GCC版本并运行/b2--toolset=gcc-5.4.0stage令我懊恼的是,我现在看到了:-32-bit:no-64-bit:yes-arm:no-mips1:no-power:no-sparc:no-x86:yes-symlinkssupported:yes-C++11mutex:no-lockfreeboost::atomic_flag:yes-Boost.Config

c++ - GCC 中的结构对齐(是否应在 typedef 中指定对齐?)

抱歉问了一个愚蠢的问题,但如果我需要确保结构/类/union的对齐,我应该在typedef声明中添加attribute((aligned(align)))吗?classmyAlignedStruct{}__attribute__((aligned(16)));typedefmyAlignedStructmyAlignedStruct2;//WillmyAlignedStruct2bealignedby16bytesornot? 最佳答案 shouldIaddattribute((aligned(align)))totypedefde

c++ - std::stoi 的问题,不适用于 MinGW GCC 4.7.2

#include#includeintmain(){std::stringtest="45";intmyint=stoi(test);std::cout我在运行MinGWGCC4.7.2的计算机上尝试了这段代码。它给了我这个错误:我做错了什么,我是从cppreference得到的.它的代码完全相同。它与描述的错误不同here. 最佳答案 看来您的MinGW需要一个补丁:EnablingstringconversionfunctionsinMinGWThispatchenablesthefollowinglistofC++11func

c++ - GCC - 在特定偏移量中定义成员的结构

在gcc中有没有一种方法,我可以在其中定义一个具有特定偏移量的特定成员的结构?我想按以下方式定义一个结构:struct{.offset(0xDC)//orsomethingequivalentintbar;}foo;然后是下面的语句:inta=foo.bar将与声明相同:inta=*(int*)((char*)&foo+0xDC);*更新*一些背景:我想访问我没有正确定义的导出结构中的成员,它有很多成员——我只关心其中的一小部分,并且它们的偏移量(结构原始定义)在每个目标平台上都有点不同(我需要为几个不同的平台编译我的代码)我已经考虑过这里评论中提到的填充选项,但是每次我想添加一个成员

c++ - gcc/g++ 输出类型

我知道这是一个非常基本的问题,但是当我用gcc/g++编译我的c/c++代码时,在汇编程序开始生成机器代码之前,中间输出的类型到底是什么?它是类似于X86指令的东西吗? 最佳答案 GCC的处理链如下:你的源代码预处理后的源代码(扩展宏和包含,去除注释)(-E,.ii)编译成汇编(-S,.s)汇编成二进制(-c,.o)链接到可执行文件在每个阶段,我都列出了使进程停在那里的相关编译器标志,以及相应的文件后缀。如果使用-flto编译,目标文件会被修饰为GIMPLE字节码,它是一种低级中间格式,目的是延迟实际最终编译到链接阶段,允许链接时间

c++ - iostream.h 在 GCC 中的位置

我在将近十年后重返C++世界。我已经在我的Windows7机器上安装了GCC并编写了一个初步程序。我有以下问题:当我说#include,我收到一条错误消息,指出找不到文件。不得不说#include让它工作。此外,当我转到安装GCC的文件夹时,我找不到任何名称的听者文件。iostream从哪里获取? 最佳答案 是您需要包含的标准C++header。它在哪里取决于您的平台。在我的身上,它在/usr/include/c++/4.4.3/iostream您可以找到g++的详细信息配置g++--verbose除其他外,这会打印出--with-

c++ - 无法使用 GCC 5.1 工具链编译 C++11 源代码

我正在尝试在Ubuntu上使用GCC5.1编译一个使用C++11特性编写的库。但是,它提示std::unique_ptr未定义。gcc(Ubuntu5.1.0-0ubuntu11~14.04.1)5.1.0g++(Ubuntu5.1.0-0ubuntu11~14.04.1)5.1.0CXX标志:-std=c++11-Wall-Wextra-Weffc++-pedantic输出:error:‘unique_ptr’innamespace‘std’doesnotnameatemplatetypestd::unique_ptrm_pimpl;但是,我能够在OSX上编译完全相同的代码。Appl

c++ - GCC模板问题

VisualStudio可以很好地编译这段代码,但gcc只允许它在没有模板运算符的情况下进行编译。使用模板运算符会出现以下错误:第29行:错误:应为`;'在“itrValue”之前classTest{public:Test&operator&strList){*this::const_iteratoritrValue=strList.begin();itrValue!=strList.end();++itrValue){*thisTest&operator&listTemplate){*this::const_iteratoritrValue=listTemplate.begin();