草庐IT

c++ - 为什么 gcc 在按值传递微不足道的结构时会发出不需要的内存访问?

众所周知,一些没有非平凡复制构造函数和非平凡构造函数的小结构在寄存器中传递。引用ARMProceduralCallStandard:Fundamentaltypeslargerthan32bitsmaybepassedasparametersto,orreturnedastheresultof,functioncalls.Whenthesetypesareincoreregistersthefollowingrulesapply:Adouble-wordsizedtypeispassedintwoconsecutiveregisters(e.g.,r0andr1,orr2andr3)

c++ - GCC 可以像 VS 一样产生结构/类名不匹配吗?

我想让GCC发出警告,当VisualStudio发现一个名称已用class和struct声明时,它会发出警告。(警告4099)这通常是由前向声明引起的,例如:structBase;...classBase{...};在这种情况下,VS实际上无法链接,因此我已将警告升级为错误。由于这个项目是跨平台的,我还想在使用GCC编译时发现这个问题——否则我可能会不小心checkin在VS中无法运行的代码。是否有任何开关或方法可以让GCC也拒绝或警告此类类/结构声明不匹配?注意:从评论来看,不确定这个警告是否合法。对于我的问题,它不相关,因为条件导致VisualStudio中的链接失败(我不能忽略警

c++ - Mingw-w64 和 TDM-GCC 一个简单的 GDI 项目的区别

我需要在Win64上为Win64(无交叉编译)构建一个简单的非商业工具(处理WindowsGDIAPI)。MinGW似乎是我的最佳选择。我以前用过32位版本,至于64位,你能告诉我以下版本之间的主要区别吗?:Mingw-w64TDM-GCC除了经典的MinGW32之外,还使用了一个简单的工具mingw-get.exe来自定义设置并跟上更新周期。现在哪个是等价的? 最佳答案 我在此处发布了MinGW/MinGW-w64/TDM-GCC的简短概述:WhatisthedifferencebetweenOrwell'sMinGWandTDM

c++ - 当 GCC 明确表示会减慢程序速度时,为什么要在 O2/O3 处启用优化?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。Improvethisquestion引自https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html:-falign-labels-falign-labels=nAlignallbranchtargetstoapower-of-twoboundary,skippinguptonbyteslike-falign-functions.Thisoptioncaneasilymak

c++ - 链接器错误 : gcc

我每次编译程序、配置和安装时都会遇到这个错误一些东西,比如binutils、textinfo等。/usr/local/bin/ld:thislinkerwasnotconfiguredtousesysrootscollect2:error:ldreturned1exitstatus我想清楚地知道这一点。什么时候会到来,实际问题是什么,如何解决? 最佳答案 如果您尝试安装一个与/usr/bin中的binutils类似的版本,您应该知道gcc使用--sysroot=/选项调用ld。ld使用默认选项从源代码构建的binutils拒绝--s

c++ - 如何获得gcc编译的每个函数的最大帧大小?

是否可以获取GCC编译的每个函数的最大帧大小?我的项目中有一堆C和C++源文件,我想统计每个函数的堆栈使用情况,只是在GCC手册中找不到任何相关选项。 最佳答案 你可以试试-fstack-usage.https://gcc.gnu.org/onlinedocs/gnat_ugn/Static-Stack-Usage-Analysis.html还有-Wstack-usage=(例如-Wstack-usage=4096),它会在您编译代码时向您发出警告。 关于c++-如何获得gcc编译的每个

c++ - 为什么这个 STL 映射的条目没有在 GCC 4.5.1 中初始化?

这是代码摘录。std::maptemp;temp[0]=.1;cout我正在使用GCC版本4.4.1进行编译,并且我从temp[1]中获得了0值,正如我所期望的那样。我的同事正在使用GCC4.5.1版进行编译。在Debug模式下(使用-g标志),他得到1000。当编译Release模式(-O2标志)时,他得到0。我的想法是,这是未初始化变量通常会出现的问题类型,除了map应该根据thisquestion调用其元素的默认构造函数之外。和其他几个人喜欢它。此外,Josuttis的C++标准库指出Ifyouuseakeyastheindex,forwhichnoelementyetexist

c++ - 当重载具有多重继承的函数时,GCC 说调用它是不明确的,但 Clang 和 MSVC 没有

我正在使用这个变体库:https://github.com/cbeck88/strict-variant.它提供了一个类似于std::variant和boost::variant的类。鉴于此struct:structS{explicitS(double){}};我想这样做:strict_variant::variantv=2.0;这适用于Clang5.0.1和MSVC19.12.25831.00,但无法使用GCC7.2.1进行编译。我查看了库的代码并将问题简化为:#includestructS{constexprS(){}constexprexplicitS(double){}};te

c++ - 为什么在 gcc 中允许带有 std::string 的模板化 constexpr?

为什么gcc允许编译模板版本?它是编译器错误还是与模板一起使用时实际上有效?有人可以给我解释一下吗?它不能在clang或godbolt.org上使用的其他编译器上编译。编译错误是由在constexpr中使用的字符串和字符串流产生的。#include#include#includetemplateconstexprstd::stringfunc1(Ta,Tb)//Compilesandruns{std::stringstreamss;ss 最佳答案 GCC可能就在这里。根据dcl.constexpr第6段:Iftheinstantia

c++ - gcc 4.7.1 是否支持线程?

我遵循了说明here关于设置CodeBlocks以使用GCC4.7.1。我提到的页面上提供的示例编译得很好,但是当我尝试编译以下代码时,它随后产生了错误。我必须说我什至将编译器设置为C++11标志通过编译器设置(-std=c++11)但仍然没有运气。编译失败的代码:#include#include#include//Thisfunctionwillbecalledfromathreadvoidfunc(inttid){std::coutth;intnr_threads=10;//Launchagroupofthreadsfor(inti=0;i错误:main.cpp||Infuncti