草庐IT

c++ - 定义(变量)没有被 MSVC 正确评估?

运行以下代码#include#defineFOO#defineBARdefined(FOO)intmain(){#ifBARstd::cout在VisualStudio显示Bardisabled!,同时在gcc中运行相同的代码或clang显示Barenabled!。这是Microsoft编译器中的错误吗?根据标准,什么是正确的? 最佳答案 根据标准,这是未定义的行为。[cpp.cond],强调我的Priortoevaluation,macroinvocationsinthelistofpreprocessingtokensthatw

c++ - 使用 C++11 在 Cygwin 上使用 Clang

我在Cygwin上安装了Clang并尝试编译这段代码:#includeintmain(){std::cout如果我执行clang++file.cpp,效果很好。如果我执行clang++file.cpp-std=c++11,它将不起作用。我从这样的标准header中得到错误:Infileincludedfromfile.cpp:1:Infileincludedfrom/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/iostream:39:Infileincludedfrom/usr/lib/gcc/i686-pc-cygwin/4.5.3/in

c++ - 没有将 bool 隐式转换为浮点类型的警告?

看起来这个片段在clang中编译时没有警告,即使使用了-Weverything:doublex;...if(fabs(x>1.0)){...}我错过了什么吗?还是编译器和C++标准认为将bool转换为double是有意义的? 最佳答案 这是使bool成为整数类型的结果。根据C++标准,第3.9.1.6节Valuesoftypeboolareeithertrueorfalse(Note:Therearenosigned,unsigned,short,orlongbooltypesorvalues.—endnote)Valuesofty

c++ - 不允许 clang 变量名中的 Unicode/特殊字符?

Thisquestionhasunicodetextthatmaynotdisplaycorrectlyinallbrowsers.clang现在(>3.3)在变量名中支持unicode字符http://llvm.org/releases/3.3/tools/clang/docs/ReleaseNotes.html#major-new-features.但是一些特殊字符仍然被禁止。intmain(){doubleα=2.;//alpha,ok!double∞=99999.;//infinity,error}给予:error:non-ASCIIcharactersarenotallowe

c++ - 设置 IndentWidth 在 clang 格式中不起作用

我的主目录中有.clang-format并设置indentwidth4如下。BasedOnStyle:LLVMStandard:Cpp11IndentWidth:4TabWidth:4UseTab:Never但是当我使用clang-format-style='~/.clang-format'a.cpp格式化我的代码时,缩进宽度变为2。例如://Seethisindentwidth2.Theoriginalfilehaswidth4,//butclang-formatchangesittowidth2.intmain(intargc,charconst*argv[]){Aa;a.bar(

c++ - 缺少用于 LLVM 编译器-rt 的 libclang_rt.san-x86_64.a 文件

我刚刚构建了LLVM/Clangcompiler-rt并尝试了-fsanitize选项。但奇怪的是链接失败了,因为它找不到libclang_rt.san-x86_64.a。/usr/bin/ld:cannotfind/home/hongxu/RESEARCH/llvm-git/obj/bin/../lib/clang/3.7.0/lib/linux/libclang_rt.san-x86_64.a:Nosuchfileordirectoryclang-3.7:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation)当我进入

c++ - clang 格式,数组初始化器

在我们的项目中,我们有时在一行中初始化数组,有时我们将它们初始化为block。那就是strings::UniCharconsts[]={'H','e','l','l','o'};对比strings::UniCharconsts[]={'H','e','l','l','o'};我希望clang-format能够区分这两种类型,而不是将第二种类型转换为第一种类型或在左大括号之后对齐元素。不是这样的:strings::UniCharconsts[]={'H','e','l','l','o'};有没有办法使用配置文件来实现? 最佳答案 在最

c++ - 如何通过优化查看 C++ 代码的编译器重构

我想知道当优化打开时,是否/如何能够看到编译器如何使用clang++/g++重新格式化一段代码。我知道英特尔编译器有一个生成相关输出的标志,但我似乎无法在其他编译器中找到等效项。 最佳答案 所以,感谢您的指导,我发现了一些非常酷的东西,所以我想分享一下:使用Clang++-4.0,可以按如下方式编译可执行文件:clang++-4.0-std=c++14-O3-fsave-optimization-record-foptimization-record-file=myOptfile.yamlsourceFile.cpp这会在myOpt

c++ - 有没有办法强制使用 "this->"用于 clang-format/clang-tidy 中的类成员/方法?

我到处搜索,但我可能用错了术语。我还没有为此找到选项。我唯一发现的是这个未回答的问题(但是有点宽泛):CPPlint:Canyouenforceuseofthisforclassvariables?. 最佳答案 鉴于existingoptions,我不相信这在clang-format中是可能的,future也不会。主要原因是程序的工作方式。它不会将C++代码解析为AST,而是将文本标记化而不需要包含(定义它的成员和全局变量)而不是编译数据库(影响定义、包含路径……)它是甚至可以给它一段代码并重新格式化。从问题的性质来看,如果它可以存

c++ - 自定义支持 __attribute__((format))

GCC和Clang都支持对可变参数函数(如printf)进行编译时检查。这些编译器接受如下语法:externvoiddprintf(intdlevel,constchar*format,...)__attribute__((format(printf,2,3)));/*2=format3=params*/在OSX上,Cocoa框架还使用了NSString的扩展:#defineNS_FORMAT_FUNCTION(F,A)__attribute__((format(__NSString__,F,A)))在我们公司,我们有一个自定义的C++框架,其中包含一堆类,例如BaseString,它