草庐IT

compiler-warnings

全部标签

c++ - 双重标准?为什么只对 char* const& a = "bla"发出警告?

在尝试深入研究thisquestion等案例背后的机制之后暴露了,我仍然不明白为什么下面代码中的第三行只生成警告,而第二行是错误。intmain(){constchar*const&a="bla";//Validcodeconstchar*&a2="bla";//Invalidcodechar*const&a3="bla";//Shouldbeinvalidbutsettlesforawarningreturn0;}我知道虽然引用初始化正在将字符串文字转换为指针引用,但它不应该删除任何cv-qualifiers对象具有,并且由于转换后的类型是constchar*const(从字符串文字

C++ header guards 不会编译

在vs2010中无法使用header保护来编译任何代码。例如:#ifndefSIMPLE.H#defineSIMPLE.H#includeclassPlace{private:intm_xplace;intm_yplace;Place(){}public:Place(intx,inty):m_xplace(x),m_yplace(y){}voidMove(intx,inty);voidset_place(intx,inty){m_xplace=x,m_yplace=y;}intget_place_x(){returnm_xplace;}intget_place_y(){returnm_

c++ - GCC -Wunused-function 不起作用(但其他警告有效)

我试图通过使用GCC的-Wunused-function标志在我的代码库中找到未使用的函数。如我所料,使用gcc-Wall-Wunused-functionmain.cpp编译以下代码会打印一个unusedvariable警告:warning:unusedvariable‘x’[-Wunused-variable]但是,编译器不会给出unused-function警告。我该怎么做才能让GCC注意到未使用的函数foo()?//main.cppvoidfoo(){}//should(butdoesn't)trigger'unusedfunction'warningintmain(intar

C++ 编译器不会在默认参数结束前警告缺少参数

我用3个参数声明了一个C++函数声明,其中两个参数有这样的默认值。voidfunc(intconstn,boolconstflag=true,int*array=NULL){/*printcontentsofarray*/}当我错误地调用函数时,省略了第二个参数但包括了第三个参数,就像这样intarray[5]={1,2,3,4,5};func(5,array);gcc和intel编译器(Ubuntu14.04LTS上的默认编译器)都没有提示指定了最后一个参数而没有指定倒数第二个参数。代码运行但为数组发送了NULL(我预计代码会失败)。我的问题是为什么编译器没有提示它找不到匹配的函数,

c++ - 将负文字作为无符号参数传递时,g++ 会发出警告吗?

考虑:unsignedfoo(unsignedu){returnu;}intmain(){foo(-1);return0;}在这里,函数foo被调用时u等于4294967295(或类似的大值)。如果程序员不注意,这可能相当出乎意料。例如,也许您正在实现pow以将Polynomial类提升为幂。因为只有正幂是可能的,所以你决定签名Polynomialpow(constPolynomial&p,unsignedexp);然后一个粗心的程序员调用pow(p,-1)得到一个逆函数,而不是一个警告或错误,它似乎可以工作,但可能会使用大量的内存和时间产生一个完全错误的答案。g++5.3.0和gcc

Python 扩展 : using different compiler flags for a C parts and C++ parts

对于我的python扩展,我有C(来自嵌入式库)和C++文件,它们被编译并链接在一起。只有C++部分与Python接口(interface)(通过SWIG)。这在VS2015的windows和linux下的gcc中都有效。但是,对于gcc,C++文件需要一组不同于C文件的编译器标志(例如-std=c++11、-Wno-reorder),以避免出现有关C中不正确标志的警告。在setuptools/distutils中有没有办法单独更改每个文件的编译器标志,例如。基于文件扩展名?我已经使用了来自https://stackoverflow.com/a/36293331/3032680的自定义

c++ - 使用复合赋值运算符解决转换警告

在我们公司,我们制定了使用-Wconversion进行编译的政策,这会产生一些转换警告。虽然我同意这种额外的检查可以防止错误,但在以下情况下看到速记运算符的警告很烦人:uint8_tbyte;byte+=8;//conversionto'uint8_t'from'int'mayalteritsvalue[-Wconversion]现在这可以通过将其重写为byte=(uint8_t)(byte+8)来解决,这反过来会降低代码的可读性。有没有更好的方法来做到这一点? 最佳答案 考虑您收到警告的原因,即整型常量8的类型为int。C中的所有

c++ - g++ : Is there a way to access compile flags inside the code that is being compiled?

有没有一种方法(例如,定义的常量)来访问正在编译的代码中运行编译器的编译标志。例如,我想要一个程序来写入编译时使用的标志。intmain(){std::coutgcc/g++是否存在这样的常量?或者更好:是否有在gcc和clang中都定义的常量?我对检查优化级别和-march标志的值特别感兴趣。那么,如果没有显示所有标志的常量,是否至少有显示这些值的常量? 最佳答案 以下命令打印出所有预定义的宏:g++-dM-E-这适用于gcc和g++。您可以自行检查-不幸的是,没有宏可让您轻松访问完整的gcc/g++命令行。幸运的是,大多数-m.

C++ fatal error C1001 : An internal error has occurred in the compiler

在Release模式下编译时出现以下错误。1>d:\users\eyal\projects\code\yalla\core\src\runbox\win32\window.cpp:fatalerrorC1001:Aninternalerrorhasoccurredinthecompiler.1>(compilerfile'f:\dd\vctools\compiler\utc\src\p2\main.c',line249)1>Toworkaroundthisproblem,trysimplifyingorchangingtheprogramnearthelocationslistedab

c++ - 来自 Xcode 8.3.2 : Non-portable path to file - specified path differs in case from file name on disk 的错误警告

出于某种原因,我的代码库突然开始收到数以千计的此类警告。但到目前为止,所有有问题的文件和路径都是完全正确的,与我在磁盘上看到的与Finder相匹配。他们是不是在暗地里另有幕后?当问题实际上并不存在时,为什么Xcode会生成这些警告?尽管http://stackoverflow.com/questions/43067017/non-portable-path-to-file-file-h-specified-path-differs-in-case-from-file-na是关于相同的警告,在这种情况下我已经验证导入路径与磁盘上的文件名匹配。 最佳答案