草庐IT

optimization - 有没有办法告诉 GCC 不要优化一段特定的代码?

我正在从事一个依赖编译器优化的项目,但我需要一些不被GCC优化的代码。这可能吗? 最佳答案 GCC4.4有一个属性:intfoo(inti)__attribute__((optimize("-O3")));记录在:https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Function-Attributes.html#index-g_t_0040code_007boptimize_007d-function-attribute-3195 关于optimi

c++ - 编译嵌套参数包代码时出现 gcc 段错误

我试图编写一个代码(截至2014年1月使用mingw32gcc4.8.1)涉及两个参数包Args1...和Args2...。我在这里(http://en.cppreference.com/w/cpp/language/parameter_pack)了解到我需要一个嵌套类。Args1...和Args2...的长度相同(最终我希望从Args1推导出Args2......)。有时它们甚至可以是同一类型。所以我想为这个简单的案例编写一个速记using语句作为开始:templateusingzip_t=zip::with;但是,gcc在编译这条语句时会产生段错误。如果我做错了什么或者这是一个gc

c++ - GCC模板参数模板

我正在尝试使用模板的模板作为参数,当我用clang编译时一切正常,但是当我尝试使用GCC4.8时出现以下错误:can'tdeduceatemplatefor'TReceiver'fromnon-templatetype'DamageAnimationSystem'这是我的情况:我有一个程序,其中类可以为某些类型的事件订阅事件管理器,但不是全部。为此,我继承了一个具有特定类型的类:classDamageAnimationSystem:publicReceiver,publicReceiver在这里,我的类将监听“DamageEvent”和“HealthEvent”,因此我需要为此类事件声

c++ - gcc 4.4 与 gcc >4.4 中的默认链接模型

我正在尝试使用两个大型、复杂的线性代数库,它们定义了许多相同的函数。我不能重写(在一种情况下是合法的,但在技术上是两种情况)它们中的任何一个。我们称它们为“特殊”和“正常”,因为我只从特殊调用了几个函数。为了始终如一地调用normal.h中定义的函数,并且仅在某些情况下从special.h中调用函数,我做了如下操作:namespacespecial_space{#include"special.h"//Definesfoo()}#include"normal.h"//Definesfoo()intmain(){foo();//Callsfoo()definedinnormal.hspe

GCC 中的 C++11 thread_pool、futures、promises 支持

是N2276中的任何一个gcc支持吗?我目前使用的是4.6.1,其中std::thread似乎工作正常。如果不是,我应该使用boost'sthreadpool?什么是可以轻松过渡到最终futures、promises和thread_pool的良好替代方案/权宜之计?也许this有用吗?N2276似乎没有列出here.我想知道N2276的任何特性是否会被纳入-我想我读到了有关futures和promises以及其他进入C++11的范例:将不得不谷歌看看周围发生了什么。 最佳答案 gccC++librarystatuspage显示其中大

c++ - 在 GCC 中,如何在不导出所有符号的情况下导出共享库的所有类型信息符号?

问题是:我有一个默认隐藏符号的共享库。实际上,它使用-Xlinker--version-script=选项导出特定文件中的一些符号,但隐藏所有其余符号。问题是,如果我们试图捕获在其他共享库中定义的异常,我们就会遇到问题,因为类型信息被这个共享库隐藏了。我无法明确地使异常类可见,因为它们是在我无法控制的开源库中定义的。我也不想在版本脚本符号文件中明确列出异常类的类型信息的损坏名称,因为有许多开发人员在这个库上工作,他们一定会忘记为future。我尝试在开源.hpp文件之前使用#pragmaGCCvisibilitypush(默认),但它似乎没有用-符号不可见。我也尝试过使用-fvisib

c++ - unique_ptr、nullptr 并支持 gcc 4.5.x 和 4.6.x

我正在开发一个有两个不同最终用户的库,其中一个使用gcc4.5.3,另一个刚刚迁移到gcc4.6.3。该库使用新的C++11智能指针(特别是unique_ptr)并在gcc4.5.3上编译良好。然而,在这两个版本之间,gcc开始支持nullptr,因此unique_ptr的API发生了变化,以更接近标准。现在这样做,下面的代码从好到模棱两可unique_ptrup(newint(30));...if(up==0)//ambiguouscallnowtounique_ptr(int)for0是否有一种干净的(即,下一句)方法来更改上面的if语句,以便它在有和没有nullptr的情况下都有

c++ - gcc 是否有 pragma 来定义文件类型/编译器?

GCC根据文件扩展名(.c、.cc)、命令行参数(-x)或直接调用适当的编译器(比如g++而不是gcc)自动在编译器之间切换。有什么方法可以在文件中使用pragma来覆盖这些吗?评论后更新:我正在将当前50/50C和C++的代码库转换为完全使用C++编译器编译。这是为了允许当前的“C”模块调用我无法更改(并且不想包装)的新C++基础。对于真正是C的文件,我想将扩展名保留为.c,即使它们现在具有C++链接。我认为将它们保留为“.c”表明它们为何如此(我在这里考虑后代!;-))但是更改构建系统以适应每个更改的C文件名也是一项艰巨的工作。更糟糕的是,C文件的一小部分不会正常地转换为C++,所

c++ - 如何消除来自 GCC 的长整型常量警告

我有一些使用大整数文字的代码如下:if(nanoseconds这会向编译器发出警告integerconstantistoolargefor'long'type[-Wlong-long]。但是,如果我将其更改为:if(nanoseconds...我反而收到警告useofC++11longlongintegerconstant[-Wlong-long]。我想仅针对这一行禁用此警告,但不禁用-Wlong-long或对整个项目使用-Wno-long-long。我试过用它包围它:#pragmaGCCdiagnosticpush#pragmaGCCdiagnosticignored"-Wlong-

c++ - 对于曾经在 gcc5 中工作的情况,在 gcc6 的部分特化中无法推导出模板参数

此代码在gcc6中导致错误(但在gcc4.8、5.2和clang3.6中工作正常):templatestructouter{templatestructinner{};};templatestructis_inner_for{templatestructpredicate{staticconstexprboolvalue=false;};templatestructpredicate::templateinner>{staticconstexprboolvalue=true;};};static_assert(is_inner_for::templatepredicate::inner