草庐IT

c++ - 用于外部基于 gcc 的构建器的 Eclipse CDT 错误解析器

我知道CDT7将包含一个正则表达式错误解析器,但我现在使用的是CDT6。我有一个外部CDT构建器,它只调用一个shell脚本来触发我的构建(基于Jam)。该构建使用GCC,错误和警告被流式传输到控制台View,但当然没有错误解析器正在查看它,所以我的问题View中没有任何内容。有没有办法将CDT配置为在我的控制台输出上使用它的GCC扫描器来填充“问题”View?GCC解析器已启用,它只是不查看我的输出。 最佳答案 我不确定这个问题是否仍然存在,但以下解决方案应该可以填充“问题”View:1)在CDT中创建一个空的C++makefil

c++ - MinGW GCC 在没有警告或错误的情况下编译错误代码

你能给我解释一下为什么MingWGCC在这段代码中不产生警告吗:intmain(){intnum;intpeople[num];cout>num;}但是在这里,我只用num=1替换了最后一条语句,现在有一个警告...intmain(){intnum;intpeople[num];//warning:'numisuseduninitialized..'cout 最佳答案 我认为因为您只使用了第一个元素,所以它优化了第一个示例中的num。它只是创建一个单元素数组。在第二种情况下,因为你实际使用了num,所以它给出了错误

c++ - 使用 SFINAE 在 GCC 和 Clang 上给出不同的结果

我正在学习如何利用SFINAE来发挥我的优势。我正在尝试使用它来根据serialize()的存在来选择函数实现在对象中运行。这是我用来确定类型是否定义了serialize()函数的代码:templateclassHasSerialize{private:typedefcharyes[1];typedefcharno[2];templatestaticyes&test(char[sizeof(&C::serialize)]);templatestaticno&test(...);public:staticconstboolvalue=sizeof(test(0))==sizeof(yes

c++ - 如果将 "+m"用作输出约束,gcc 能否正常工作?

根据gccdocs在扩展汇编器上:只有当操作数的约束[...]允许寄存器时,您才应该使用读写操作数。这似乎非常明确:您不能将+m用于输出。但是,我已经看到它被执行了很多次。事实上,LinusTorvalds是onrecord如说gcc文档是次要的。它们没有更新,它们不正确,它们不反射(reflect)现实,它们无关紧要。对于这样的事情,唯一正确的用法是“+m”如果编译器最终会搞砸我的代码,我不想使用+m。甚至检查输出asm看它是否工作并不意味着明天当我更改一些看似无关的东西时它仍然可以工作。或者当我获得gcc的下一个更新时它仍然可以工作。如果文档是正确的并且我不能依赖它正常工作,我想知

c++ - GCC API 无法分解其自己的导出符号

我正在尝试使用GCC’sabi::__cxa_demangle分解从g++生成的目标文件中导出的符号.但是,我总是得到错误mangled_nameisnotavalidnameundertheC++ABImanglingrules下面是我调用该函数的方式:std::stringdemangled(std::stringconst&sym){std::unique_ptrname{abi::__cxa_demangle(sym.c_str(),nullptr,nullptr,nullptr),std::free};return{name.get()};}(省略了错误处理;它存在于comp

c++ - gcc 和 clang 不同意 constexpr 函数

从生成器函数编写一个简单的编译时std::array工厂,我偶然发现了这个:clang++3.5.1和g++4.9.2不同意函数是否是constexpr或不。代码(这是c++14!):#include#includetemplateconstexprstd::arraymake_array_impl(GenTypegen,std::index_sequence){return{{gen(I)...}};}templateconstexprstd::arraymake_array(GenTypegen){returnmake_array_impl(gen,std::make_index_

c++ - 为什么 gcc-4.9.2 不支持 std::string.insert(iterator, range) 返回迭代器

根据cppreference,C++11应该支持:templateiteratorinsert(const_iteratorpos,InputItfirst,InputItlast);但是当我尝试使用g++4.9.2编译以下代码时:std::stringstr{"helloworld"},addition{"hmy"};autoiter=str.erase(str.begin(),str.begin()+4);iter=str.insert(next(iter),addition.begin(),addition.end());//Error我收到以下错误(liveexample):e

c++ - gcc -Wall 引入编译器错误

我正在尝试在KeilIDE中为stm32f103微Controller使用gcc编译器。我正在编译一个相对较小的项目,其中包含一些模板代码和几个纯虚拟类。没有花哨的C++11东西。到目前为止一切顺利。当我使用-w或-pedantic编译时,项目编译正常。但是当我输入-Wall时,这部分出现了编译错误:templateT&round(T&value,UroundStep){UMBA_ASSERT(roundStep>0);UMBA_STATIC_ASSERT(std::numeric_limits::is_integer);UMBA_STATIC_ASSERT(std::numeric_

【Linux】动态库和静态库——动态库和静态库的打包和使用、gcc编译、拷贝到系统默认的路径、建立软连接

文章目录动态库和静态库1.静态库和动态库的介绍2.静态库的打包和使用2.1生成静态库2.2使用静态库的三种方式2.2.1gcc编译2.2.2拷贝到系统默认的路径2.2.3建立软连接3.动态库的打包和使用3.1生成动态库3.2使用动态库3.3解决加载不到动态库的方法动态库和静态库1.静态库和动态库的介绍  静态库和动态库是两种不同的程序库,它们在编译和链接阶段有不同的应用方式和特点。  静态库(StaticLibrary):  静态库是在编译时被全部链接到目标程序中,一同生成可执行文件,所以生成的可执行文件较大,但运行时不需要链接其他库。静态库的后缀通常为.a或.lib。在程序发布时,通常只需要

c++ - 将 gcc 构建的 Boost 链接到英特尔 C++ 编译程序时静态初始化期间的段错误

我有一个Ubuntu13.04系统,安装了最新的SVN版本的BoostC++库。Boost安装是使用系统的nativegcc版本v4.7.3构建的。我非常广泛地使用Boost,当我使用gcc编译时它工作得很好;我已经使用了其中的许多,包括Boost.Thread(我将在下面详细讨论),没有任何问题。如果我尝试使用与已安装的Boost库链接的英特尔C++编译器(我个人使用v13.x系列中的几个不同版本)构建程序,就会出现问题。当我这样做时,程序启动后立即出现段错误;它似乎发生在Boost.Thread库的静态初始化期间。这是一个简单的示例程序:#include#includeintmai