草庐IT

gcc-plugin

全部标签

c++ - gcc 和 g++ 错误 : error trying to exec 'cc1plus' : execvp: No such file or directory

我在编译时遇到问题.c和.cpp使用gcc的文件和g++,对于这两种情况,我都收到了消息:g++(orgcc):errortryingtoexec'cc1plus':execvp:Nosuchfileordirectory`我已经尝试重新安装gcc和g++并确保它们的版本相同。编辑:我使用的是ubuntu16.04.1LTS,g++和gcc的版本都是5.4.020160609。以下是echo|g++-v-xc++-fsyntax-only-的输出:Usingbuilt-inspecs.COLLECT_GCC=g++Target:x86_64-linux-gnuConfiguredwit

c++ - 在 gcc 中是否有字符串文字到 bool 转换的警告

在一个相当大的代码库中,我在一个cpp文件中发现了以下构造(重写的片段)intmain(){boolb;//...somecode...;b="False"}这是完全合法的代码,但显然不是故意的。它很容易修复,但自2014年以来一直存在而没有人注意到,因此显然不容易被发现。是否可以让gcc对此发出警告? 最佳答案 g++7和clang++5都不会用-Wall-Wextra-Wpedantic发出警告。Clang有一个名为-Wstring-conversion的警告,可以捕获错误,但gcc没有。我简要浏览了thegccwarningd

c++ - 是否有任何理由不将 assert() 包装在解析为 gcc 中的 __builtin_unreachable() 的宏中?

上下文:在这个answer,我了解到gcc的__builtin_unreachable()可能会对性能产生一些令人惊讶的影响,因为看起来如下:if(condition)__builtin_unreachable();被完全剥离,用作优化提示,只要condition可以保证没有任何副作用。所以我对此的直接react是我应该创建以下宏,并且绝对在我通常使用assert()的所有地方使用它,因为在assert中会产生副作用()首先会是一个主要错误://TODO:addhandlingofothercompilersasappropriate.#ifdefined(__GNUC__)&&def

c++ - 如何强制 GCC 警告类函数的使用?

使用GCC4.8.*,当激活警告-Wfloat-equal时,编译器会警告float之间的严格比较,如下例所示:doublex=3.14159;doubley=1.11111;if(x==y)//现在,假设我想要一个包含双变量并定义相等运算符的类:classComplex//(it'sonlyanexample){private:doublere;doubleim;public:booloperator==(Complexconst&z)const;};boolComplex::operator==(Complexconst&z)const{return(this->re==z.re)

c++ - gcc:通过显式 memcpy 避免严格别名违规警告

我有一个占用64位内存的类。为了实现平等,我使用了reinterpret_cast,但它会在gcc7.2(但不是clang5.0)上导致此警告:$g++-O3-Wall-std=c++17-g-cexample.cppexample.cpp:Inmemberfunction‘boolX::eq_via_cast(X)’:example.cpp:27:85:warning:dereferencingtype-punnedpointerwillbreakstrict-aliasingrules[-Wstrict-aliasing]return*reinterpret_cast(this)=

c++ - 为什么异常不适用于 OSX 上的 gcc7 和 -static-libgcc?

如果我用gcc-7、-static-libstdc++和-static-libgcc编译这个简单的程序;然后在OSX上运行#include#includeintmain()try{throwstd::runtime_error{"abc123"};return0;}catch(conststd::runtime_error&e){std::cout失败,错误代码为134。为什么它不像在linux上使用相同选项编译时那样打印“abc123”? 最佳答案 已在GCC8中修复(-ish);查看对PR86215的更新和相关的PR80556.

c++ - 通用 lambda、重载、std::is_invocable 和 SFINAE - GCC 和 Clang 之间的不同行为

问题我写了一段可以编译的复杂模板代码withGCC8.2.1,但不是withClang7.0(代码和错误链接)。我认为这可能是thisQ&A的暗示,但我看不到它。动机我正在编写一个类,我希望它可以用两个不同类型的可调用对象构造,但也可以省略其中一个,即:my_class(callable_1);my_class(callable_2);my_class(callable_1,callable_2);那应该没有问题。但是,为什么不允许callable_1和callable_2成为函数模板(或带有operator()模板的仿函数)。也就是说,我想要这个(或者至少最初想要):my_class

c++ - GCC 和 clang 中奇怪的构造和析构函数语法(void * 返回类型)

在编写一些C++代码(使用clang、x86_64linux进行编译)时,我不小心编写了以下结构:classClass{*Class(){}};即在构造函数名称前加上星号(*)。再尝试一下,我注意到您可以在前面放置任意数量的*;它也适用于析构函数,即classClass{********Class(){}********~Class(){}};Clang编译它没有任何错误或警告。但是GCC给出了警告controlreachesendofnon-voidfunction这让我相信我实际上是在声明一个返回类型为void*(或void********)的构造函数/析构函数。写任何类型的带有值

c++ - GCC 的 <experimental/ranges> 过滤器 View 无法使用无限范围 iota() 进行编译

我正在探索gcc中的实验范围库实现。将无限iota范围与过滤器View组合时,我得到了一个令人惊讶的编译错误(liveexample与GCC9.0HEAD201812):#include#include#includeintmain(){usingnamespacestd::experimental::ranges;autoodds=view::filter([](intx){returnx%2!=0;});//autov=std::vector{0,1,2,3,4,5};//autox=v|odds;//(1)ok//autox=view::iota(0,6)|odds;//(2)o

c++ - gcc 相对于在新表达式中解析 type-id 发出错误

这个程序#includeintmain(){conststd::size_tN1=2;conststd::size_tN2=3;int(**p)[N1]=new(int(*[N2])[N1]);}doesnotcompile使用编译器C++gccHEAD10.0.020190。编译器报错prog.cc:Inlambdafunction:prog.cc:8:40:error:expected'{'before')'token8|int(**p)[N1]=new(int(*[N2])[N1]);|^prog.cc:Infunction'intmain()':prog.cc:8:34:err