草庐IT

c++ - g++ 不显示 'unused' 警告

我有一小段C++代码:#include#include#includeusingnamespacestd;intmain(){inti=0;istream_iteratorEOS;doublex;return0;}现在我用我的g++(GCC)4.4.4编译它g++-W-Wall-pedantictest.cc-otest并得到:test.cc:Infunction'intmain()':test.cc:9:warning:unusedvariable'i'test.cc:11:warning:unusedvariable'x'为什么未使用的EOS没有警告?

c++ - 如果返回值未用于特定类型,则编译失败

我想让某些函数调用的编译失败,而不是其他函数调用。我想要失败的函数调用是那些当值是某种类型时不处理返回值的函数调用。在下面的示例中,不处理返回Error的函数是编译错误,但不处理返回任何其他内容的函数应该成功。注意:我们的运行时环境(嵌入式)不允许我们使用以下结构:RTTI、异常。这段代码只需要用Clang编译,我宁愿不必注释每个函数。我们更喜欢在编译时而不是在运行时失败的解决方案。enumclassError{INVAL,NOERR,};//dosomethingthatcanfail.ErrorDoThing();//mayreturndifferentreturncodes,we

c++ - gcc 与 clang : noexcept parsed in unused template specialization when static casting

我正在尝试将函数指针静态转换为特定函数重载,但似乎clang仍会解析(未使用的)模板特化的noexcept语句,从而生成编译器错误。如果未使用相应的函数重载,GCC似乎并不关心noexcept。templatevoidfun(T)noexcept(T(1)){}voidfun(int){}voidfun(int*){}intmain(){inta;fun(&a);//callingworksfinefun(a);static_cast(&fun);//staticcastingdoesn't}https://godbolt.org/z/ixpl3f这里是哪个编译器出错了?当将函数指针转

c++ - Clang 为使用的类型别名发出 "unused type alias"警告

我有一些代码,Clang正在为其生成警告。这是对实际代码的简化,但精神是一样的。本地类中的this_t用于实例化其他一些模板类。templatestructvalue_holder{Tvalue;};templateintget_value(){structvalue_t{usingthis_t=value_t;//^herestaticvalue_holderval(){returnvalue_holder();}operatorint(){return0;}};returnvalue_t::val().value;}intmain(intargc,char**argv){retur

c++ - 应用于类型别名声明的 [[maybe_unused]] 属性的语法

尝试找出[[maybe_unused]]属性的正确语法导致了followingcode:intmain(){typedefintX;//warning[[maybe_unused]]typedefintY;//OkusingZ=int;//warning//[[maybe_unused]]usingW1=int;//error:expected';'before'using'//using[[maybe_unused]]W2=int;//error:expectednested-name-specifierbefore'['tokenusingW3[[maybe_unused]]=in

c++ - 'unused' 的初始化被 'goto label' 跳过 - 为什么我为 std::string 而不是为 int 获取它?

我在某些代码中遇到了这个错误,经过一些试验后我偶然发现了这个怪异之处——我为std::string得到了它,但没有为int得到它。对于std::string我得到errorC2362:initializationof'unused'isskippedby'gotolabel':{gotolabel;std::stringunused;label:;}对于int我没有收到任何错误,但是:{gotolabel;intunused=10;label:;}为什么不同?是因为std::string有一个非平凡的析构函数吗? 最佳答案 这包含在

c++ - 属性可以应用于构造函数参数吗?

Clang8.0.0和GCC9.1.0似乎不同意这是否是有效代码。structFoo{Foo([[maybe_unused]]intx){}};intmain(){}Clang不产生警告(即使使用-Wall-Wextra-Wpedantic)但是GCC产生这个错误:test.cpp:2:7:error:expectedunqualified-idbefore'['token2|Foo([[maybe_unused]]intx){}|^test.cpp:2:7:error:expected')'before'['token2|Foo([[maybe_unused]]intx){}|~^|

c++ - 为什么没有为所有变量报告 "unused variable"警告?

这个问题在这里已经有了答案:g++doesnotshowa'unused'warning(3个答案)关闭8年前。我有这个代码://initializerlists#include#includeintmain(){intvalues[]{1,2,3};std::vectorv{4,5,6};std::vectorcities{"London","NewYork","Paris","Tokio"};return0;}然而,gcc编译器只针对values数组给我unusedvariable警告。为什么v和cities没有被报告?

c++ - 在C/C++结构中添加UNUSED元素会加快并减慢代码执行速度

我编写了以下结构,供我正在使用的Arduino软件PWM库中使用,以一次PWM(最多20个引脚(在Uno上)或一次最多70个引脚(在Mega上))。如所写,代码的ISR部分(eRCaGuy_SoftwarePWMupdate())处理此结构的数组,需要133us来运行。但是很奇怪,如果我取消注释“byteflags1;”行,则为。(在struct中),尽管flags1尚未在任何地方使用,但ISR现在需要158us来运行。然后,如果我取消注释“byteflags2;”因此现在BOTH标志都已取消注释,运行时回落到(133us)之前的位置。为什么会这样呢?以及我该如何解决?(即:对于该特定

c++ - C++中的VS2010调试器, "unused=???"或 "unused=0"的含义

在VisualStudio2010(C++,非托管)中调试,信息unused???或unused0应该是什么意思?我附上了两个屏幕截图,child是现有窗口的HWND。我也对HWND有时显示为“未使用”,有时显示为“0”这一事实感到困惑。当有一个指向未分配内存的指针时,我会理解这种情况,但在我的特定情况下,窗口已经创建并且有效。 最佳答案 这可以追溯到九十年代初期,当时只有HANDLE作为一种类型来声明任何Windows对象的句柄。这是一个错误工厂,程序员可能会胡乱编写代码,例如,在需要窗口句柄的地方传递字体句柄。所以后来添加了ST