草庐IT

c++ - 为什么 GCC 不显示匿名变量的任何错误?

我读了this解释匿名变量在C++中为何无效的问题。但以下程序在GCC7.2上编译时没有任何警告或错误(即使使用-Wall)-demo:intmain(){int(*);//anonymousvariable?}这里,这显然也是一个整型匿名变量。那么,为什么GCC不显示任何错误或警告?这是GCC错误吗? 最佳答案 gcc及其检测变量的方式记录了一些错误,例如我用它来编译一个简单的程序,它给出了一个错误,说变量可能未初始化。这只是编译器中的一个错误。例如参见https://gcc.gnu.org/bugzilla/show_bug.c

c++ - 验证 GCC 中的错误

我想验证以下是GCC中的错误,而不是我对C++的理解。考虑以下代码:structA{structB{templateUas()const{returnU();}};Boperator[](int)const{returnB();}};templatestructas{templatestaticTcall(constU&u){returnu[0].as();//acceptedbyClang3.2,rejectedbyGCC4.7//returnu[0].templateas();//doesnothelpandisIMHOnotneeded//returnu[0].A::B::as(

c++ - gcc 无效版本(最大)错误添加符号 : Bad value

我已经在Linuxx86_x64上成功地构建了几个32位的静态和共享库,现在我试图将它们链接到一个可执行文件中,但我收到以下错误:/usr/bin/ld:foo.so:__moddi3:invalidversion21(max0)foo.so:erroraddingsymbols:Badvaluecollect2:error:ldreturned1exitstatus其中foo.so是我构建的共享库之一。__moddi3函数是libgccIntegerLibraryRoutines的一部分.它的签名是:—RuntimeFunction:long__moddi3(longa,longb)

C++ gcc `floorf` 不是 `std` 的成员?

我有以下代码:#includefloatfoo(floatx,unsignedintm,floatq=0.0f){returnstd::floorf(x*float(m)+q);}现在,当我尝试使用g++5.4.0和选项-std=c++11编译它时我收到一条错误消息‘floorf’isnotamemberof‘std’.现在我的理解是C++11标准的第26.8条要求标准C++库头文件声明与标准C库头相同的一组函数,尽管在命名空间std中;第1.2条规定“C”应解释为C99;C99标准的第7.12.9.2条要求标准C库头文件声明一个函数floatfloorf(float).所以根据这个推

c++ - GCC、-O2 和位域——这是错误还是功能?

今天我在试验位域时发现了令人震惊的行为。为了讨论和简单起见,这里有一个示例程序:#includestructNode{inta:16__attribute__((packed));intb:16__attribute__((packed));unsignedintc:27__attribute__((packed));unsignedintd:3__attribute__((packed));unsignedinte:2__attribute__((packed));};intmain(intargc,char*argv[]){Noden;n.a=12345;n.b=-23456;n.

c++ - 链接使用不同版本的 GCC 构建的目标文件

我对使用现代版本的GCC4.4.x/4.5.x构建C++库有一些兼容性问题,其中客户端使用旧版本,比如3.4.x/4.1.x。建议的一种解决方案是编译目标文件并分发这些文件。然后,客户端可以使用任何版本的GCC和相关的ABI进行链接。一些问题:这是正确的吗?我应该静态链接以避免libstdc++兼容性问题吗?这是不必要的吗(我听说gcc3.4以后是向前兼容的)?干杯,格雷姆 最佳答案 最安全的方法是给他们一个.so及其对应的带有稳定二进制API的header。为了保持二进制稳定,API不应接受或返回任何std::类似std::str

c++ - 为什么 GCC 不自动向量化这个循环?

我正在尝试优化占我程序大量计算时间的循环。但是当我使用-O3-ffast-math-ftree-vectorizer-verbose=6打开自动矢量化时,GCC输出它无法对循环进行矢量化。我正在使用GCC4.4.5代码:///Findthepointinthepathwiththelargestvparametervoidprediction::find_knife_edge(constfloat*__restrict__constelevation_path,float*__restrict__constdiff_path,constfloatpath_res,constunsign

c++ - 为什么当枚举或 int 值作为函数的 bool 参数传递时 gcc 不发出警告?

我有以下代码:typedefenum{FOO,BAR,BAZ}foo_t;staticvoidafunc(boolis_it_on){/*dothejob*/}intmain(void){afunc(BAZ);return0;}编译此代码不会生成任何警告消息,即使为编译器提供了-Wall-Wextra选项。我什至尝试过使用-Wconversion选项,但它没有效果,因为bool和enum对于g++似乎具有相同的大小。(据我所知,enum类型的大小未在规范中定义)我已经梳理了gcc手册,但一无所获。问题:有没有办法强制编译器在这种情况下生成警告?或者这种隐式转换是否符合C++规范?我使用

c++ - 带有 decltype : bug in clang or gcc? 的 sfinae

Clang-3.2可以编译并且代码按预期运行:structhave_f{intf(inti){return10;}};structempty{};templatestructouter{Tt;//ifThavef(),defineouter_f()templateintouter_f(inti){returnt.f(i);}};intmain(){outero1;outero2;//tosilenceunusedvarwarningreturno1.outer_f(10)+sizeof(o2);}任何版本的GCC拒绝:t.cc:13:6:error:‘structempty’hasno

c++ - 为什么 GCC 允许从私有(private)嵌套类继承?

考虑以下代码:classA{classB{};};templateclassD:A::B{};voidf(){Dd;}D继承自A::B这是一个私有(private)嵌套类。我原以为这是一个错误,但GCC接受了这个代码。是GCC中的错误还是我遗漏了什么? 最佳答案 我找到了答案。因为它可能对其他人有用,所以我将其发布在这里-这是GCC错误47346. 关于c++-为什么GCC允许从私有(private)嵌套类继承?,我们在StackOverflow上找到一个类似的问题: