草庐IT

c++ - 如何从 Clang 中的 CallExpr 获取函数指针的参数?

我正在尝试分析其中包含函数调用的C源代码。我能够使用下面的源代码分析正常的函数调用以毫无问题地获取它们的参数,其中ce是一个CallExpr对象:1.if(ce!=NULL){2.QualTypeq=ce->getType();3.constType*t=q.getTypePtrOrNull();4.5.if(t!=NULL){6.llvm::errs()isFunctionPointerType()isPointerType()getCalleeDecl();13.while(D->getPreviousDecl()!=NULL)14.D=D->getPreviousDecl();1

c++ - Clang 预处理器从 C++ 文件中去除注释

我知道gcc预处理器可以使用-fpreprocessed仅从文件中删除注释并保持其余部分不变,但我如何对clang执行相同的操作? 最佳答案 作为decribedhere,使用-E(可能还有-P,以排除行号信息)clang-E-P-o(虽然这不仅仅是删除评论-它还会扩展宏等......) 关于c++-Clang预处理器从C++文件中去除注释,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi

c++ - Clang线程安全分析和线程角色

clang线程安全分析docs和paper暗示可以指示特定函数仅由特定线程调用。来自论文:#include"ThreadRole.h"ThreadRoleInputThread;ThreadRoleGUIThread;classWidget{public:virtualvoidonClick()REQUIRES(InputThread);virtualvoiddraw()REQUIRES(GUIThread);};classButton:publicWidget{public:voidonClick()override{depressed=true;draw();//WARNING!}

c++ - 为什么 clang 输出对齐特定的东西

假设我有一个基本的c程序,我用clang编译它,如下所示:#include"stdio.h"intx=0x7FFFFFFF;intmain(void){printf("%d\n",x);}使用clang-emit-llvmtemp.c-fno-rtti-O3-S编译生成以下位码:;ModuleID='temp.c'targetdatalayout="e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"targettriple="i686-pc-linux-gnu"@x=globali322147483647,align4@.str=privateu

c++ - 需要帮助在 Windows 上正确设置 CLANG

我需要一些帮助才能在Windows上正确设置clang。我安装了VisualStudios2015。和WindowsSDK。我最近安装了Clang,并通过它运行了一个非常基本的helloworld以确保它正常工作。它给了我一个我无法理解的错误。VisualStudios会处理得很好。这是我从clang收到的错误输出:MicrosoftWindows[Version10.0.14393]C:\Users\Leo>cdC:\Users\Leo\Desktop\SandboxC:\Users\Leo\Desktop\Sandbox>clang++hello.cppInfileincluded

c++ - 如何允许 clang-format 在一行中格式化空类/结构?

具有以下结构定义:structcity{};structcountry{};我想要clang-format像这样为我格式化structcity{};structcountry{};我怎样才能做到这一点?我可以看到很多选项,例如AllowShortBlocksOnASingleLine、AllowShortFunctionsOnASingleLine或AllowShortIfStatementsOnASingleLine但没有AllowShortClassDefinitionsOnASingleLine(或类似的). 最佳答案 很遗憾

c++ - 仅当当前行溢出 clang 格式时才在新行上加括号

我最近决定在我的C++项目中包含一个.clang-format文件,以使代码更加统一和易于阅读。我最喜欢Google的默认值,除了我想使用4个空格缩进而不是两个。这样做的问题是,当当前行超出80个字符的列限制时,它会使某些语句更难阅读。例如,在溢出的if语句中:if(some_condition||some_other_condition||yet_another_condition){//blockstartshere}yet_another_condition的对齐方式与ifblock的开头相匹配,这使得在没有某种中断的情况下难以阅读。理想情况下,我希望在这种情况下发生的事情是这样

c++ - Clang 发出有关不受支持的 __declspec 属性的警告

我一直在尝试将第三方库链接到我的程序。工具链使用Clang4.0.0进行编译(emscripten1.37.19在工具链中使用了clang)。我收到了一个关于__declspec的错误,在查找之后,我意识到我需要将-fdeclspec参数添加到clang。但是,现在我收到此警告:warning:__declspecattribute'dllimport'isnotsupported[-Wignored-attributes]Clang4.0文档说这个属性应该被AFAIK支持。我在这里错过了什么吗? 最佳答案 -fdeclspec如果

c++ - gcc/clang 在基本结构的后填充中布置派生结构的字段

这个问题在这里已经有了答案:Standard-layoutandtailpadding(5个答案)关闭4年前。当涉及填充和继承时,我对gcc和clang如何布局结构感到困惑。这是一个示例程序:#include#includestructA{void*m_a;};structB:A{void*m_b1;charm_b2;};structB2{void*m_a;void*m_b1;charm_b2;};structC:B{shortm_c;};structC2:B2{shortm_c;};intmain(){Cc;memset(&c,0,sizeof(C));memset((B*)&c,-

c++ - 如何在没有 clang-tidy 警告的情况下使用 union ?

Clang-tidy的cppcoreguidelines-pro-type-union-access规则本质上是对union的完全禁止,它标记了union成员的所有访问权限。我的库有一个外部“C”接口(interface),其结构包含union。我不能在头文件中使用变体,这些变体应该可以从C而不仅仅是C++使用。显然,在我使用union的任何地方用NOLINT乱码代码并不是一个好主意。除了禁用此检查之外,还有其他解决方法吗? 最佳答案 这取决于您对union的使用,特别是取决于您的问题中提到的union使用在您的代码中的分散程度。如