首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

团队效率工具: 代码格式化之Clang-format

使用方法 Linux下下安装Clang-format : sudo apt-get install clang-format LLVM代码风格格式化main.cpp, 结果直接写到main.cpp...# 连续声明时,对齐所有声明的变量名 AlignConsecutiveDeclarations: true # 左对齐换行(使用反斜杠换行)的反斜杠 AlignEscapedNewlinesLeft...: true # 水平对齐二元和三元表达式的操作数 AlignOperands: true # 对齐连续的尾随的注释 AlignTrailingComments: true # 允许函数声明的所有参数在放在下一行...8 documentation 使用clang-format格式化你的代码 Clang-Format格式化选项介绍 clang-format 格式化工具简易配置 vim安装插件以后启动变慢怎么解决?...---- vim代码格式化插件clang-format ↩ clang-format-diff.py ↩

12.8K23

从零开始学C++之IO流类库(四):输出流格式化(操纵子方式格式化,ios类成员函数方式格式化)

一、操纵子方式格式化 数据输入输出的格式控制使用系统头文件中提供的操纵符。把它们作为插入操作符 #include  using namespace std; // 通过操纵子方式进行格式化输出 // 宽度控制 // 对齐控制 // 填充控制...二、类成员函数方式格式化 通过调用流的成员函数控制格式,如setf、unsetf、width、fill、precision等。...优点是在设置格式同时,可以返回以前的设置,便于恢复原来的设置。 ios类提供成员函数对流的状态进行检测和进行输入输出格式控制等操作: ? ?...#include  //#include  using namespace std; // 通过成员函数方式进行格式化输出 // 宽度控制 // 对齐控制 //

99100
您找到你想要的搜索结果了吗?
是的
没有找到

C++代码风格和clang-format配置

把谷歌代码风格稍微修改了下: 每行最大长度由80列扩张到160列 public/private/protected不需要缩进一个空格 对应的clang-format配置为AccessModifierOffset...二、对齐配置 这里把所有的对齐配置选项都罗列出来: 2.1 AlignAfterOpenBracket(BracketAlignmentStyle) 如果true,在左括号后水平对齐参数。...配置为Consecutive 格式将输出如下: #define SHORT_NAME 42 #define LONGER_NAME 0x007f #define EVEN_LONGER_NAME...int a; // My comment a int b = 2; // comment b int b = 2; // comment about b 2.6 函数初始化列表对齐...2.7 函数声明对齐 AllowAllParametersOfDeclarationOnNextLine(Boolean) 如果函数声明不适合一行,则允许将函数声明的所有参数放到下一行,即使BinPackParameters

4.1K340

深入iOS系统底层之程序中的汇编代码

最后一个能力来说:当我们要实现一个HOOK所有OC方法调用的逻辑时,因为HOOK的方法不能破坏原有函数的参数栈,而且还需要在适当的时候调用原始的函数而不关注原始函数的入参时就只能选择用汇编语言来实现。...就如高级语言中的静态函数和静态变量以及全局函数和全局变量一样,汇编语言中的符号声明也有两种: //对外可见的全局符号,可以被外部程序引用和访问。...4.对齐 因为内存寻址访问的一些特性,要求我们的某些代码或者数据的存放地址必须是某个数字的倍数,也就是所谓的对齐。设置对齐的关键字如下: //表明此处的地址是(2^3)8的倍数。...关于函数帧栈信息和异常的实现原理我会在后续的文章中继续介绍。 引用汇编代码文件中的符号 因为汇编代码源文件没有所谓的.h头文件声明。...所以当你在其他文件中要想使用汇编语言中定义的函数或者全局变量时,可以在你的源代码文件的顶部进行符号使用的声明: //xxxxx.m //函数声明 extern void 不带下划线的函数符号(参数列表

1.6K30

iOS_ __attribute__

语法关键字是__attribute__紧跟2套圆括号,括号内是一个逗号分隔的属性列表。 __attribute__指令被放在类前、函数/变量声明后面。...flatten:声明被修饰函数内部调用的函数尽可能做内敛处理,具体还是要根据当前编译选项及上下文来定 pure:声明函数除了返回值外没有其他任何效果,仅依赖形参/全局对象。...不能使用全局对象,参数不能是指针类型、往往不能调用非 const 属性的函数 sentinel:声明该可变参数函数的参数列表需要一个 NULL 结尾 malloc:声明函数返回的块不能包含任何指向其他对象的指针...实现内存对齐,深度优化。...该 block 被释放前会调用 unlock format 声明属性有输出特征,编译时检查 函数声明函数参数 之间得格式化字符串是否匹配。

22130

关于NSObject对象的内存布局,看我就够了!

4、内存对齐的注意事项 4.1 内存分配 在结构体中,声明成员变量的顺序不一致,也会导致最终分配内存大小的不同。...具体总结如下: 跨平台数据结构可考虑1字节对齐,节省空间但影响访问效率; 结构体成员合理安排位置,节省空间; 跨平台数据结构人为进行字节填充,提高访问效率但不节省空间; 本地数据采用默认对齐提高访问效率...在main.m文件所在的目录下,继续执行上述讲解的Clang的命令。...其实这里涉及一点计算机的知识点——内存对齐。在结构体中,总大小为结构体对最大成员大小的整数倍,如不满足,最后填充字节满足,可分配的最小内存是结构体中内存占用最大的成员变量的大小。...先通过Clang编译器命令将OC代码转化成C/C++代码,了解OC对象的底层结构。 紧接着,通过剖析获取内存大小API的源码以及内存对齐的原理,明确了数据结构底层计算内存大小的普适规则。

1.7K20

Whats New in LLVM 9

一般情况下 Clang 会帮我们做这些事情,不必给方法声明手动标记这些属性。而且 Clang 会对最终生成的汇编指令进行优化,去掉多余的 retain 和 autorelease。...CPU 上实现也是不一样的,这是因为不同架构 CPU 的对齐方式不同,偏移量也不同。...比如在 arm64 上由于指令对齐方式较好,只需判断函数返回的地址指向的值是不是 0xaa1d03fd 即可;而在 x86_64 平台上则要用一大坨代码来判断。...无参数函数声明 如果函数没有参数,需要用 void 显式声明。否则可能调用方会传入其他类型和数量的参数,在运行时引发 crash。如果用 void 显式声明,在编译阶段就会产生 error。...constexpr if if constexpr 开始的语句被称为 constexpr if 语句。

2.3K100

自定义Clang命令,利用LLVM Pass实现对OC函数的静态插桩

result = num + 2; } return result;}为了解决上述问题,接下来介绍如何利用Clang在编译的过程中修改对应的IR文件,实现把桩函数插入到指定的函数实现中。...图片那么如何自定义Clang命令,利用llvm Pass实现对函数的静态插桩,下面分为两部分,一部分是llvm Pass,另外一部分是自定义Clang的编译参数。两者合起来实现这个功能。...cmake 声明工程新增一个子目录。...-fexperimental-new-pass-manager// 启动功能,基础块级别地插入函数-add-inject-func-call=bb// 设置白名单,只有在白名单里面的文件/函数才会插桩.../OC-Hook-Demo/Foo.m# 指定对应的函数名,*号可支持模糊匹配func:*foo*白名单和黑名单是参考Clang Sanitizer配置文件的格式,更详细的参考官方说明。

2.1K191

C++ ABI总结

翻译单元(TU)在标准中有明确的概念;笔者的理解,大概可以认为生成的每个object file都是一个翻译单元。...C的ABI主要包括以下5个方面: 对象布局(Object layout) 数据类型的大小和对齐(Size and default alignment of data types) 函数调用方式(Calling...Convention) 寄存器使用(Register usage convention) 目标文件的格式(这里的格式指ELF / COFF等,不是产生的内容的格式) 但是对于C++,它的ABI还十分取决于编译器...调用构造/析构函数(Invoking ctor & dtor):规定了一个类的成员如何构造/析构,例如如何构造成员中的C数组。 class的布局和对齐,例如多继承中成员变量的排布。...虚表的布局和对齐,例如虚函数在虚表中的顺序。

53600

【IOS 开发】Objective - C 入门 之 数据类型详解

该类型没有名称, 因此没有空类型的变量, 变量不能转换成空类型, 但是空类型可以转换成任何引用类型; (2) 数据类型输出 NSLog()简介 : NSLog 是 Foundation 框架中功能强大的函数..., 可以输出任何类型的数据; -- 占位符 : NSLog() 函数中各式与 C 语言中大致相似, 第一个参数是加了 @ 的字符串, 后面的参数是用于替换占位符的; 整型占位符说明 :  -- %d :...长字符串; -- n(任意整数) : %8d 代表输出8位数字, 输出总位数; -- .n : 浮点数 限制小数位数, %5.2f 表示 5位数字 2位小数, 字符串 截取字符个数; -- - : 字符左对齐...*date = [[NSDate alloc]init]; NSLog(@"%d 十进制整型", a); NSLog(@"%5d 五位十进制整型", a); NSLog(@"%-5d 左对齐的五位十进制整型...-- 说明 : 两个枚举变量 today 和 tomorrow 只能取值 enum 中得枚举值; (3) 枚举值简介 枚举值常量 : 在 {} 中得是枚举常量 或者 枚举元素, 该元素不是变量, 不能对齐进行赋值

1.1K20

微信安全下一代特征计算引擎的探索与实践

:VarDecl变量声明和FunctionDecl函数声明,分别对应变量c和函数factorial;函数由参数列表和函数体组成,参数声明ParmValDecl对应参数int n,CompoundStmt...组合语句就是对应函数factorial的函数体;函数体由一些列的声明Decl(Declaration)和语句Stmt(Statement)组成,factorial的函数体包含一个ValDecl变量声明,...了解语法规则后,分析下语法解析的过程,下图展示了右侧代码的Parse过程,解析其中 n <= 1为例输出函数调用栈Call Stack 调用栈20-15: 这5个函数Clang Driver函数,其中...调用栈7:函数体由声明Decl和语句Statement组成,解析函数是ParseStatemenOrDeclaration,解析一个语句或者声明,该函数继续递归下降解析到函数体第一条语句 调用栈5: 函数体第一天语句是...构建if语句条件表达式 n <= 1的LLVM IR为例, CodeGen调用栈Call Stack如下: 调用栈19-15: 这5个函数Clang Driver函数 调用栈13-12:AST的顶层节点是一个

16710

Objective-C代码规范检测

AST如下图所示: 通过上面的语法树可以看到其描述代码的具体结构,而在Clang对代码编译时会进入一个语法树的解析阶段,则这个阶段中语法树的每个节点都会被遍历到,因此借助此阶段可以检测程序中所有代码的书写格式是否符合规范...在clang-namespaceclang官网可以查询到这些 节点 描述 ObjcCategoryDecl 分类声明节点 ObjcCategoryImplDecl 分类实现节点 ObjcImplementationDecl...类实现节点 ObjcInterfaceDecl 类声明节点 ObjcIvarDecl 实例变量声明节点 ObjcMethodDecl 实例方法声明 ObjcPropertyDecl 属性声明节点 ObjcProtocolDecl...协议声明节点 ParmVarDecl 参数节点 … … 3、添加访问节点的插件 要实现自定义的clang插件(C++ API为例),应按照以下步骤: 自定义继承自 clang::PluginASTAction...= FixItHint::CreateReplacement(SourceRange(nameStart, nameEnd), replacement); FixItHint可用于修复改动,将想要的格式替换原有的格式

1.2K30

代码美化的艺术

尤其前端代码,在日渐复杂的单页面开发中,代码格式化不仅是为了美观,也是为了更好的阅读及检查。关于代码的格式化并没有统一的标准,每个人都有自己的见解,所以本文的目的探讨和推荐为主。...目前常用的代码宽度有三种,分别是 80、100、120,很显然,80 太短,120 太长,中庸之道,取 100 刚好。...我比较喜欢下面的格式化方案,整齐紧凑,属性之间相互对齐,标签一目了然。 ? 简单说一下上面这种格式化效果的方法:需要使用 VSCode 默认的 HTML 格式化插件。...函数格式化 我觉得模板和函数非常类似,模板属性就好比函数参数。...谷歌推荐 clang-format进行格式化,初步试了一下,并没有达到满意的效果,可能配置文件有点问题。我觉得关于函数格式化问题暂时可以不必深究。

1.9K20

代码美化的艺术

尤其前端代码,在日渐复杂的单页面开发中,代码格式化不仅是为了美观,也是为了更好的阅读及检查。关于代码的格式化并没有统一的标准,每个人都有自己的见解,所以本文的目的探讨和推荐为主。...目前常用的代码宽度有三种,分别是 80、100、120,很显然,80 太短,120 太长,中庸之道,取 100 刚好。...我比较喜欢下面的格式化方案,整齐紧凑,属性之间对齐,标签一目了然。 简单说一下上面这种格式化效果的方法:需要使用 VSCode 默认的 HTML 格式化插件。...以下是根据以上规则格式化后的代码 函数格式化 我觉得模板和函数非常类似,模板属性就好比函数参数。...谷歌推荐 clang-format 进行格式化,初步试了一下,并没有达到满意的效果,可能配置文件有点问题。我觉得关于函数格式化问题暂时可以不必深究。

1.9K20
领券