草庐IT

c++ - gcc 4.7 和递归 constexpr 函数

我正在玩constexpr递归并尝试查看它是如何编译的,我不明白在什么情况下gcc选择在编译时或运行时计算递归。我正在使用以下阶乘计算代码:#includeconstexprunsignedintfactorial(unsignedinti){returni>0?i*factorial(i-1):1;}intmain(void){std::cout然后我更改值x在阶乘中。在没有优化的情况下编译时,表达式不会在编译时计算。使用-O1编译时标志,表达式在编译时仍未计算。与-O2,如果x,表达式是在编译时计算的.在这个值之后,阶乘被内联实现为一个循环。更改-fconstexpr-depth的

c++ - 'long long long' 对于使用 log4cpp 的 GCC 来说太长了

我正在开发一个使用日志库log4cpp的QT应用程序。但是现在,在包含log4pp的头文件的地方,我得到了这个编译错误:'longlonglong'对于GCC来说太长了当我找到这个错误的根源时,头文件stdint.h在这一行打开:__MINGW_EXTENSIONtypedeflonglongint64_t;有人能告诉我如何处理吗? 最佳答案 好的,解决了,我只需要在开始时包含stdint.h 关于c++-'longlonglong'对于使用log4cpp的GCC来说太长了,我们在Sta

c++ - Linux gcc 和 Windows Visual Studio 处理静态常量的区别?

我们一直在Linux(gcc)和Windows(VisualStudio)上编译一个库,正如预期的那样,发现在两个平台上获得干净编译所需的东西之间存在细微但不显着的差异。今天,我将gcc编译器标志更改为使用-fPIC(以启用共享库)。当我们测试将程序链接到库时,我们开始出现错误(第一次),undefinedreference指向2个在头文件中声明和初始化的静态常量(但不在.cpp中文件)。我找到了thisStackOverflowanswer这似乎解决了这个问题,解释说,即使staticconst在头文件中初始化,它仍然需要在代码文件中定义。进行该更改确实消除了gcc链接器错误。但是,

c++ - 禁用关于 "underscore-prefixed user-defined literals"的 GCC 警告

我的一个客户有很多代码使用了“ui64”、“ui32”等...后缀,我需要移植它。为了避免验证几个正则表达式查找+替换的可能漫长的夜晚,我将所述后缀重现为用户定义的文字。我正在寻找“-Wno-xxx”标志,用于作为结果弹出的“前面没有‘_’”警告。我搜索了警告列表here,但我的大脑目前正遭受相当严重的字母汤综合症,所以我可能错过了。我使用的是cygwin附带的g++4.8.2。 最佳答案 我相信您正在寻找-Wno-literal-suffix。从gcc-7开始(见此处liveongodbold),这个选项也是turnsoffwar

c++ - 在分析代码时,我应该使用匹配的 (gcc) 编译器优化标志吗?

我正在使用-O3在编译代码时,现在我需要分析它。对于分析,我遇到了两个主要选择:valgrind--tool=callgrind和gprof.Valgrind(callgrind)文档状态:AswithCachegrind,youprobablywanttocompilewithdebugginginfo(the-goption)andwithoptimizationturnedon.但是,在C++optimizationbook由AgnerFog撰写,我已阅读以下内容:Manyoptimizationoptionsareincompatiblewithdebugging.Adebug

c++ - Cygwin GCC 与 Visual Studio 库链接

我使用VisualStudio2012Express创建了一个简单的库(静态64位-.lib)。这个库只有一个功能:intget_number(){return67;}假设生成的库名为NumTestLib64.lib。我正在尝试使用Cygwin64编译一个简单的程序(让我们称它为test.cpp),它将链接NumTestLib64.lib并将打印的结果>get_number():#includeintget_number();intmain(){printf("get_number:%d\n",get_number());return0;}很简单吧?显然不是。使用g++-otestte

c++ - 如何检查 configure.ac 中的特定 gcc 功能

比如gcc4.7有一个新特性——Wnarrowing。在configure.ac中,如何测试当前gcc是否支持某个功能?有一个file在gnulibc中,但对我来说意义不大。 最佳答案 gcc和clang都支持-W[no-]narrowing和-W[no-]error=narrowing选项。使用-std=c++11,gcc默认发出一个警告,而clang默认发出一个错误。即使你只提到gcc,我认为你可以将功能检查扩展到像clang这样试图提供相同选项和扩展的编译器。这可能也包括英特尔的icc。假设您选择了带有AC_PROG_CXX的

C++ "error: "对象在引用中丢失...”取决于 gcc 版本

我在使用一个gcc版本(4.3.2)时遇到编译错误,而使用较新版本的gcc可以毫无怨言地编译相同的代码,例如4.5.2.下面的例子说明了这个问题:classBase{protected:intmember;};templateclassA:publicBase{};templateclassC:publicA{C(){Base::member=1;}};intmain(){}对于4.3.2,我得到:test.cpp:Inconstructor'C::C()':test.cpp:4:error:objectmissinginreferenceto'Base::member'test.cp

ARM_Linux中GCC编译器的使用

目录前言:GCC编译过程:预处理:编译阶段:汇编:链接阶段GCC的常见使用前言:什么是GCC:gcc的全称是GNUCompilerCollection,它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器(GNUCCompiler),现在除了c语言,还支持C++、java、Pascal等语言。gcc支持多种硬件平台。特点:gcc是一个可移植的编译器,支持多种硬件平台。例如ARM、X86等等。gcc不仅是个本地编译器,它还能跨平台交叉编译。所谓的本地编译器,是指编译出来的程序只能够在本地环境进行运行。而gcc编译出来的程序能够在其他平台进行运行。例如嵌入式程序可在x86上编译,然后

c++ - GCC 无法优化涉及成员函数指针的委托(delegate) lambda 函数

我使用GCC4.9.2和clang3.6.0编译了以下c++14代码。我使用了-O3标志。#includestructS{inta;intA()const{returna;}};templateintFunc(F&&f,Args&&...args){returnf(std::forward(args)...);}usingPtrA=int(S::*)()const;intF(Sconst&s,PtrAptr){return(s.*ptr)()*5;}intp(Sconst&s){returns.A()*5;}intP1(Sconst&s){returnFunc(&F,s,&S::A);