草庐IT

iphoneos-clang

全部标签

c++ - 如果语句包含宏,则 clang 无法替换语句

我正在使用clang尝试解析(使用C++API)一些C++文件,并使所有大小写-断点对使用特定样式。示例:**Original**switch(...){case1:{}break;case2:{break;}}**Afterreplacement**switch(...){case1:{break;}case2:{break;}}如果代码部分不包含任何宏,我目前所拥有的正是我想要的。我的问题是:clang是否以不同的方式处理扩展(如果我转储有问题的语句,它将显示扩展版本)宏?如果是这样,我怎样才能让它工作?可能有帮助的其他信息:我正在使用Rewriter::ReplaceStmt用新

c++ - clang-format 可以为我对齐 #defines block 吗?

我有一个包含这样一些行的源文件;#defineARC_V2_LP_START0x002#defineARC_V2_LP_END0x003#defineARC_V2_STATUS320x00a所有值都很好地对齐。不幸的是,clang-format会这样做;#defineARC_V2_LP_START0x002#defineARC_V2_LP_END0x003#defineARC_V2_STATUS320x00a我找到了AlignConsecutiveDeclarations和AlignConsecutiveAssignments选项,但没有任何东西可以对齐连续的#defines。可以这样

c++ - clang-format 可以为我对齐 #defines block 吗?

我有一个包含这样一些行的源文件;#defineARC_V2_LP_START0x002#defineARC_V2_LP_END0x003#defineARC_V2_STATUS320x00a所有值都很好地对齐。不幸的是,clang-format会这样做;#defineARC_V2_LP_START0x002#defineARC_V2_LP_END0x003#defineARC_V2_STATUS320x00a我找到了AlignConsecutiveDeclarations和AlignConsecutiveAssignments选项,但没有任何东西可以对齐连续的#defines。可以这样

c++ - Clang "couldn' t 推断模板参数“而 gcc/g++ 可以。哪个是正确的?

我一直在尝试用clang编译一个项目(使用gcc/g++很好),并且编译停留在模板调用上。我尝试创建显示相同错误消息的最简单的类似代码。这里是:#include#include#includeusingnamespacestd;intA(doublein){return1;}intA(intin){return1;}templateMtest(Tinput,M(fun)(T)){returnfun(input);}intmain(intargc,constchar*argv[]){cout来自clang的错误(当然出现两次):error:nomatchingfunctionforcal

c++ - Clang "couldn' t 推断模板参数“而 gcc/g++ 可以。哪个是正确的?

我一直在尝试用clang编译一个项目(使用gcc/g++很好),并且编译停留在模板调用上。我尝试创建显示相同错误消息的最简单的类似代码。这里是:#include#include#includeusingnamespacestd;intA(doublein){return1;}intA(intin){return1;}templateMtest(Tinput,M(fun)(T)){returnfun(input);}intmain(intargc,constchar*argv[]){cout来自clang的错误(当然出现两次):error:nomatchingfunctionforcal

c++ - 可变参数模板作为模板参数 : deduction works with GCC but not with Clang

在使用GCC4.7.2和Clang3.1编译一些C++11代码时,我遇到了一个问题,即Clang无法推断出GCC成功的模板参数。在更抽象的形式中,代码如下所示:src/test.cc:structElement{};templatestructFirstContainer{};templatestructSecondContainer{};templateclassContainer>voidprocessOrdinary(Container/*elements*/){}templateclassContainer>voidprocessOrdinary(Container/*elem

c++ - 可变参数模板作为模板参数 : deduction works with GCC but not with Clang

在使用GCC4.7.2和Clang3.1编译一些C++11代码时,我遇到了一个问题,即Clang无法推断出GCC成功的模板参数。在更抽象的形式中,代码如下所示:src/test.cc:structElement{};templatestructFirstContainer{};templatestructSecondContainer{};templateclassContainer>voidprocessOrdinary(Container/*elements*/){}templateclassContainer>voidprocessOrdinary(Container/*elem

c++ - 如何制作干净的clang前端?

我正在开发一个C++源代码分析器项目,看来clang是一个不错的候选者解析工作。问题是clang严重依赖基础设施“llvm”项目,如何配置它以获得干净的前端,而无需任何面向具体机器的后端?就像LCC一样,它们为专注于解析器部分的人提供了一个“空”后端。任何建议表示赞赏。 最佳答案 我最近在Windows上做了这个。从here下载clang和llvm源代码.安装cmake和Python(与文档相反,您确实需要Python来构建clang;至少,如果cmake找不到Python运行时,它会放弃)。您还需要VS2008或VS2010。有一

c++ - 如何制作干净的clang前端?

我正在开发一个C++源代码分析器项目,看来clang是一个不错的候选者解析工作。问题是clang严重依赖基础设施“llvm”项目,如何配置它以获得干净的前端,而无需任何面向具体机器的后端?就像LCC一样,它们为专注于解析器部分的人提供了一个“空”后端。任何建议表示赞赏。 最佳答案 我最近在Windows上做了这个。从here下载clang和llvm源代码.安装cmake和Python(与文档相反,您确实需要Python来构建clang;至少,如果cmake找不到Python运行时,它会放弃)。您还需要VS2008或VS2010。有一

c++ - 是否应该通过 std::cin 将负数读入 unsigned 失败(gcc,clang 不同意)?

例如,#includeintmain(){unsignedn{};std::cin>>n;std::cout输入-1时,clang6.0.0输出00而gcc7.2.0输出42949672951。我想知道谁是正确的。或者也许两者都是正确的标准没有指定这一点?如果失败,我的意思是(bool)std::cin被评估为假。clang6.0.0也无法输入-0。从Clang9.0.0和GCC9.2.0开始,在Clang的情况下使用libstdc++或libc++的两个编译器都同意上述程序的结果,与C++版本无关(>=C++11)使用并打印42949672951即他们将值设置为ULLONG_MAX并