草庐IT

c++ - gcc -finline-functions 行为?

我将gcc与-finline-functions优化一起用于发布构建。为了对抗代码膨胀,因为我在嵌入式系统上工作,我想说不要内联特定功能。显而易见的方法是通过函数属性,即attribute(noinline)。问题是当我打开作为-O3开关一部分的全局-finline-functions优化时,这似乎不起作用。它也与它被模板化有关,因为同一函数的非模板化版本没有像预期的那样被内联。有人知道当这个全局开关打开时如何控制内联吗?代码如下:#include#includeusingnamespacestd;classBase{public:templatestatic_Type_fooT(_T

c++ - 有没有办法在 xcode 上使用 c++0x?我想使用 gcc 4.4 或更高版本

我想使用gcc4.4或更高版本进行iphone开发。有人知道怎么做吗? 最佳答案 不,你不知道。相信我,你不会。Apple仍然使用gcc4.2.1,因为4.2.2及更高版本使用GPLv3,这意味着他们必须放弃对其平台的控制(这对iphonesdk来说是个大问题)。所以他们不升级。不幸的是,由于自定义补丁、ABI更改等原因,您也不能完全放入替换gcc。对不起。 关于c++-有没有办法在xcode上使用c++0x?我想使用gcc4.4或更高版本,我们在StackOverflow上找到一个类似

c++ - 在 VS2008 和 GCC 中编译 static const int = X 的最佳代码

我在编写需要在VisualStudio2008和GCC4.6中编译(并且还需要编译回GCC3.4)的C++代码时遇到了一个问题:staticconstint类成员。Otherquestionshavecoveredstaticconstint类成员所需的规则。特别是,标准和GCC要求变量在一个且仅一个目标文件中有定义。但是,VisualStudio在编译包含.cpp文件中的定义的代码(在Debug模式下)时会产生LNK2005错误。我试图在其中做出决定的一些方法是:使用.cpp文件中的值而不是header对其进行初始化。使用预处理器删除MSVC的定义。将其替换为枚举。用宏替换它。最后两

c++ - 有没有办法不警告 gcc 中的开关缺少 "COUNT"枚举常量?

如果带有枚举类型参数的开关缺少一些常量并且没有默认分支,则gcc-Wswitch选项会导致类似的警告warning:enumerationvalue'WHATEVER'nothandledinswitch然而,我们的许多开关是这样的:enumfoo{FOO_ONE,FOO_TWO,FOO_COUNT};其中FOO_COUNT从不作为值出现,但用于了解已定义并可能出现在变量中的值的数量。因为我们正在使用枚举值索引一个数组或对其进行位打包,并且需要检查它是否适合或其他什么。因此,处理所有值的枚举应该不包含这个常量。有没有办法保留该警告,但避免使用这种特殊值?即switch(foo){cas

C++ GCC 为什么这段 sfinae 代码可以用 GCC 4.7 编译,但不能用 4.8 编译?

我喜欢在模板类中使用本地类来执行类似“staticif”的构造。但是我遇到了gcc4.8不想编译我的代码的问题。但是4.7可以。这个例子:#include#include#includeusingnamespacestd;structA{voidprintA(){coutstructTest{voidprint(){structIfA{constexprIfA(T&value):value(value){}T&value;voidprint(){value.printA();}};structIfB{constexprIfB(T&value):value(value){}T&value

c++ - 带有 -isysroot 的 gcc 创建包含以等号 "="开头的包含路径并且编译失败

我正在使用适用于arm(arm-none-linux-gnueabi)的CodeSourcery工具链进行交叉编译。我使用-isysroot指向rootfs文件夹下的/usr/include文件夹,但在编译时遇到了麻烦。我已验证包含文件夹可访问。下面是gcc调用和输出。一些输出已被删除,因为我认为它不相关。预处理器提供了一个包含路径,除了以“=”开头的字符外,该路径是正确的,并指示该路径不存在。然后找不到头文件。我怎样才能让它工作?willem@jacta:~/Projects/button/Debug$arm-none-linux-gnueabi-gcc-isysroot=/home

c++ - 无法使用 clang 编译代码,但可以使用 gcc

我正在尝试修复一个开源C++项目中的一些错误,而原作者目前忙于他的学术生活而无法提供帮助。通过macports安装的gcc-4.9代码编译得很好。我一直在命令行上使用lldb进行调试。但是,如果可能的话,我希望使用clang编译代码,因为这样我可以同时使用Xcode和lldb并使错误更容易隔离。当我尝试使用clang编译代码时,出现以下错误:Infileincludedfrom./src/include/hash.h:25:./src/include/hash_stream.h:18:11:error:calltofunction'operator>>'thatisneithervis

c++ - 使用 -lstdc++fs 选项后使用 GCC6 时出现实验性::文件系统链接器错误

在尝试使用当前的GCC在C++中使用一些新的/实验性的东西时,我遇到了链接错误。好像类似question已发布,但仍然出现错误。有人可以解释一下我在这里做错了什么/哪里错了吗?。希望我已经提供了与此相关的所有详细信息。test.cpp#include#include#includenamespacefs=std::experimental::filesystem;intmain(intargc,constchar*argv[]){std::strings(argv[0]);fs::pathp(s);std::coutIhavebuilt(debugversion)thenewgccve

c++ - 防止 gcc 中的 std::function 分配内存或增加阈值

有什么方法可以防止gcc中的std::function为较大的函数对象动态分配内存?我希望下面的代码可以在没有动态分配的情况下工作:#include#include//replaceoperatornewanddeletetologallocationsvoid*operatornew(std::size_tn){std::cout&stuff){returnstuff();}};intmain(){TestPlatetestor;testor.setValue(15);conststd::function&func=std::bind(&TestPlate::getValue,&te

c++ - 为什么 GCC 会为结构化绑定(bind)诊断未使用的变量而 Clang 不会?

让我们从一个最小的例子开始:#includeintmain(){auto[a,b]=std::pair(1,'A');returna;}使用GCC7.3编译传递-std=c++17和-Wunused-variable,并运行它::Infunction'intmain()'::5:15:warning:unusedvariable'b'[-Wunused-variable]auto[a,b]=std::pair(1,'A');^GCC可能会正确地报告未使用b,但它错误地将其称为变量。引用[dcl.struct.bind]/1:Astructuredbindingdeclarationin