草庐IT

Clang-tidy

全部标签

c++ - 通过 clang-format 格式化 lambda 背后的逻辑是什么?

我在Emacs(24.5.2版)中使用clang-format(3.5版)。下面是一段由clang-format以LLVM风格格式化的简单代码:intmain(){std::cout";std::stringword;while(std::cin>>word){std::cout";}return0;}请注意它是如何对齐lambda的正文和右括号的。这种格式是否有任何逻辑,或者它只是缺乏对lambda的支持?我需要设置clang-format的配置参数以获得更好的格式吗? 最佳答案 std::accumulate(word.cbeg

c++ - __attribute__ ((weak)) 的处理在 clang 和 gcc 中是不同的

我有一个应用程序(app)和一个动态库/共享对象(dlib),它们都链接到一个静态库,该静态库使用__declspec(selectany)在头文件中声明了一个全局变量(gvar)|/__attribute__((weak)).通过设计,app和dlib都应该有自己的gvar拷贝(在MSVC和GCC上我完全明白这一点)。移植到MacOSX并用clang编译后,我看到dlib中的gvar链接到应用程序中的gvar。不确定这是一个clang错误还是设计使然;如果是设计使然,是否有任何方法可以避免它并获得与GCC/MSVC中相同的行为?clang版本:bash-3.2$c++--versio

c++ - Clang 不能与 std::experimental::optional 一起正常工作

clang似乎不能与std::experimental::optional一起正常工作。考虑以下示例:#include#includestructFoo{intbar;};intmain(){Foofoo;std::experimental::optionalopt=foo;opt.value().bar=42;std::cout它在g++5.3.1版中编译良好,但在clang7.0.0版和clang7.0.2版中均无法编译。返回的错误是:Undefinedsymbolsforarchitecturex86_64:"std::experimental::bad_optional_acc

c++ - VisitDecl 与 TraverseDecl(Clang RecursiveASTVisitor)

我已阅读此链接,但仍不完全理解TraverseDecl和VisitDecl(及其用例)之间的区别http://clang.llvm.org/doxygen/classclang_1_1RecursiveASTVisitor.html在编写我的RecursiveASTVisitor时我应该覆盖哪个方法? 最佳答案 TraverseDecl告诉前端库的ASTConsumer从AST递归访问声明。然后调用VisitDecl,您可以在其中提取相关信息。点击这两个链接以获取更多详细信息和一个简单的检查器示例:http://clang.llvm

c++ - 如何在 Clang 中启用内联函数的编译?

我正在使用Clang作为库来生成一些LLVMIR模块。这是模块的源代码:inlineintgetSevenInline(){return7;}intgetSeven(){returngetSevenInline();}我希望LLVMIR模块包含一个函数getSeven,它返回7。这是我的程序生成的LLVMIR:;ModuleID='./test.cpp'source_filename="./test.cpp"targetdatalayout="e-m:o-i64:64-f80:128-n8:16:32:64-S128"targettriple="x86_64-apple-macosx1

c++ - clang compaining about __attribute__((packed)) 即使结构需要打包

我有一个结构,需要打包(不打包大小为20个字节,但我需要16个才能读/写它)。当我添加packed属性时,我得到了结构的所有成员的error:packedattributeisunnecessaryfor警告。当使用pragma消除错误时,代码可以正常编译并且结构的大小为16,但是如果我删除pragma,它就会失败(因为我使用的是-Werror)。clang只是错误地发出了这个警告还是我做错了什么?#includetypedefstruct__attribute__((packed)){uint16_twFormatTag;uint16_tnChannels;uint32_tnSamp

c++ - Clang:从命令行或 Python 可靠地检测支持的 C++ 标准

在Python脚本中,我试图确定安装的Clang支持的最高C++标准。一个问题是我不能依赖clang--version的输出总是相同的——最好的例子是OSX上的AppleClang。尝试使用-std=c++11、-std=c++14等测试标志编译helloworld.cpp文件,...似乎不是最可靠的方法,需要创建临时文件。是否可以运行任何命令来测试某种方言是否可用而无需实际编译任何东西? 最佳答案 Isthereanycommandonecouldruntotestifacertaindialectisavailablewitho

c++ - 继承的构造函数,在 clang++3.9 中编译,在 g++7 中失败

这段代码structBase{};structDerived:Base{usingBase::Base;};intmain(){Baseb;Derivedd{b};}compilesfineonclang++3.9,然而它failsonallgcc's(包括7)和小于3.9版本的clangs错误信息error:nomatchingfunctionforcallto'Derived::Derived()Derivedd{b}'.上面的代码是否合规?PS:如果我注释掉usingBase::Base行,代码将不再在clang-3.9上编译。 最佳答案

c++ - 通用 lambda、重载、std::is_invocable 和 SFINAE - GCC 和 Clang 之间的不同行为

问题我写了一段可以编译的复杂模板代码withGCC8.2.1,但不是withClang7.0(代码和错误链接)。我认为这可能是thisQ&A的暗示,但我看不到它。动机我正在编写一个类,我希望它可以用两个不同类型的可调用对象构造,但也可以省略其中一个,即:my_class(callable_1);my_class(callable_2);my_class(callable_1,callable_2);那应该没有问题。但是,为什么不允许callable_1和callable_2成为函数模板(或带有operator()模板的仿函数)。也就是说,我想要这个(或者至少最初想要):my_class

c++ - 我可以将用 clang c++11 编译的对象与另一个用 c++17 编译的对象链接起来吗

我正在专门寻找thisquestion的clang答案.如果我用-std=c++11编译一个对象,用-std=c++17编译另一个对象,它们可以安全链接吗? 最佳答案 答案贴hereJonathanWakely的著作对于Clang也是正确的。简单的回答:如果您自己编译这两个对象,您选择的-std选项不会影响最终结果。大多数给定的C++ABI由标准库决定。其余的是各种运行时支持,例如异常、编译器内置(实际上可能分派(dispatch)到标准库)等等。libstdc++ABI兼容性是Clang的一个明确目标,所以你在这里没问题。如果您使