我在编译时遇到问题.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
在一个相当大的代码库中,我在一个cpp文件中发现了以下构造(重写的片段)intmain(){boolb;//...somecode...;b="False"}这是完全合法的代码,但显然不是故意的。它很容易修复,但自2014年以来一直存在而没有人注意到,因此显然不容易被发现。是否可以让gcc对此发出警告? 最佳答案 g++7和clang++5都不会用-Wall-Wextra-Wpedantic发出警告。Clang有一个名为-Wstring-conversion的警告,可以捕获错误,但gcc没有。我简要浏览了thegccwarningd
上下文:在这个answer,我了解到gcc的__builtin_unreachable()可能会对性能产生一些令人惊讶的影响,因为看起来如下:if(condition)__builtin_unreachable();被完全剥离,用作优化提示,只要condition可以保证没有任何副作用。所以我对此的直接react是我应该创建以下宏,并且绝对在我通常使用assert()的所有地方使用它,因为在assert中会产生副作用()首先会是一个主要错误://TODO:addhandlingofothercompilersasappropriate.#ifdefined(__GNUC__)&&def
使用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)
我有一个占用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)=
如果我用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.
问题我写了一段可以编译的复杂模板代码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++代码(使用clang、x86_64linux进行编译)时,我不小心编写了以下结构:classClass{*Class(){}};即在构造函数名称前加上星号(*)。再尝试一下,我注意到您可以在前面放置任意数量的*;它也适用于析构函数,即classClass{********Class(){}********~Class(){}};Clang编译它没有任何错误或警告。但是GCC给出了警告controlreachesendofnon-voidfunction这让我相信我实际上是在声明一个返回类型为void*(或void********)的构造函数/析构函数。写任何类型的带有值
我正在探索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
这个程序#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