草庐IT

compiler-warnings

全部标签

c++ - 在 Cygwin 中处理 "C compiler cannot create executables"

无论我尝试在Cygwin中编译什么,我都会得到以下输出:checkingformingw32environment...nocheckingforEMXOS/2environment...nocheckinghowtoruntheCpreprocessor...gcc-Echeckingforgcc...gcccheckingwhethertheCcompiler(gcc)works...noconfigure:error:installationorconfigurationproblem:Ccompilercannotcreateexecutables.日志文件的最后几行如下所示:

c++ - %llx 格式说明符 : invalid warning?

已编辑以删除第一个警告以下代码在mingw32下的g++4.4.0中按预期工作:#includeintmain(){longlongx=0xdeadbeefc0defaceLL;printf("%llx\n",x);}但是如果我使用-Wall启用所有警告,它会说:f.cpp:Infunction'intmain()':f.cpp:5:warning:unknownconversiontypecharacter'l'informatf.cpp:5:warning:toomanyargumentsforformat%lld也是一样。这在较新的版本中已修复吗?再次编辑添加:如果我指定-std

c++ - 成员函数检查 : Implement compilation-time checkings with C++11 features

我读到C++11有足够的静态检查(编译时),以便实现C++11的大部分内容(已删除)。(我在最近关于已删除概念的问题的评论中读到过此内容...-该问题因不具有建设性而很快被关闭)。下面的C++03代码仅检查类中是否存在成员函数(我的模板类要在该类上工作)。这里有4个搜索的成员函数,我总是使用相同的模式:定义函数原型(prototype)的typedef如果类型名称TExtension没有定义这样的成员函数,或者如果它有不同的原型(prototype),则调用static_cast会中断编译代码如下:templateclass{...voidcheckTemplateConcept(){

c++ - 如何通过 KIT 编译收缩层次结构?

我正在尝试编译ContractionHierarchiesImplementation由KIT提供。此软件已于2009年发布,此后显然没有得到维护。由于同时发生了一些变化(使用新的C++标准和编译器版本),代码不再编译现成的。README在编译说明方面不是很冗长,它说您应该只调用make。但是,使用make会出现以下错误:g++-Wall-W-Wno-unused-parameter-O6-c-omain.omain.cppInfileincludedfrom/usr/include/c++/4.8/ext/hash_map:60:0,fromcommand/../io/../data

c++ - 如果同时指定 EHsc 和 EHa 会发生什么

我正在处理遗留代码。为了修复一些错误,我必须为某些文件提供EHa。我测试了在构建时将EHsc和EHa都赋予整个项目。这解决了我的问题,但给出警告说编译器正在用EHa覆盖EH。(选项顺序为:/EHsc/EHa)只有在构建需要EHa的文件时才会出现此警告。它不会出现在只需要EH的源文件上。\cl:warningD9025:overriding'/EHs'with'/EHa'我的问题是,这个警告是否说明实际发生了什么?EHa是否仅应用于实际需要EHa的源文件?(其他不需要EHa的文件是用EHsc建的吗?)谢谢。 最佳答案 /EHa是“更强

c++ - 为什么 (void)sizeof(param) 不是 "using"参数?

我有一个定义如下的宏:#defineUNREF_PARAM_1(a)do{\(void)sizeof(a);\}\while(0)去除编译器警告。在我正在处理的一个新项目中,VS2013突然再次提示未引用的形式参数。奇怪的是,如果我只使用(void)param,它确实有效。有没有人知道为什么它在与(void)sizeof(param)一起使用时不起作用? 最佳答案 因为在sizeof(param)中,param是所谓的未计算的操作数,因此未被odr使用-也就是说,不是在运行时需要。但是,(void)param确实构成了odr-use

c++ - CMake 测试 : was a library compiled/linked against libc++ or libstd++?

我正在使用cmake来管理我使用第三方库的项目。此库可能已针对libc++或libstd++(取决于版本)进行编译/链接。我知道如何告诉cmake将我的项目编译/链接到libc++或libstdc++,但我不知道如何检查我正在使用的库是否是根据libc++或libstd++编译/链接的。有任何cmake命令可以检查吗? 最佳答案 对于共享库,您可以使用GetPrerequisites用于测试库是否依赖于libstc++或libc++的标准模块。例如,以下代码测试boost的program_options库是否针对libstc++或l

c++ - 对于 Cmake,您可以使用 `add_compiler_flags()` 命令修改发布/调试编译器标志吗?

在add_compile_options()的手册页中,我没有看到任何关于如何修改发布/调试编译器标志的提及。您可以使用add_compiler_options()修改发布/调试编译器标志吗?如果是,如何?如果不是,推荐的规范方法是修改therelease/debugcmakevariables[1]asdescribedhere吗?[1]即设置cmake变量CMAKE__FLAGS_(对于langc/c++它将是:CMAKE_CXX_FLAGS_RELEASE、CMAKE_CXX_FLAGS_DEBUG、CMAKE_C_FLAGS_RELEASE、CMAKE_C_FLAGS_DEBU

c++ - 如何在宏后要求分号

所以我正在编写一个库,必须使用-pedantic-ansi-std=c++98-Werror和-Weverything为clang和构建-Wall-Wextra用于gcc,我有这个宏TESTSUITE(X),它旨在像这样在全局范围内使用:TESTSUITE(currenttestsuite);它所做的是使用以下字符串调用一个函数(在程序启动时通过初始化一个虚拟变量):#defineTESTSUITE(name)\staticintANONYMOUS_VARIABLE(SOME_PREFIX)=setTestSuiteName(#name)问题是这会在clang下为-Wglobal-co

c++ - VS 编译警告 : result of 32-bit shift implicitly converted to 64 bits

VisualStudio2013发出恼人的(看似无关紧要的)编译警告:#include#definePRECISION16uint64_thi=0;for(uint8_ti=0;i这是编译警告:warningC4334:'改1好像解决了至1.所以我一直在尝试找出1中可能出现的问题.显然,如果i>=PRECISION,那么左移操作将产生未定义的行为。但是,变量i不超过PRECISION-1的值.此外,即使我们假设编译器无法推断出这个事实,我也看不出这个编译警告与左移操作数导致的潜在未定义行为有什么关系。也许它假定PRECISION-1-i的无符号值可以大于31。但是我应该如何告诉编译器它