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

C语言编程规范 clean code

,对应的右大括号需另起一行 左大括号被内容跟随时,对应的右大括号也应跟随内容 规则2.11 结构体和联合体在按成员初始化时,每个成员初始化单独一行 C99标准支持结构体和联合体按照成员进行初始化,标准中叫...建议5.7 内联函数不超过10行(非空非注释) 函数定义成内联一般希望提升性能,但是实际并不一定能提升性能。如果函数体短小,则函数内联可以有效的缩减目标代码的大小,并提升函数执行效率。...规则5.3 被多个源文件调用的内联函数要放在头文件中定义 内联函数是在编译时内联展开,因此要求内联函数定义必须在调用此函数的每个源文件内可见。...gnu89 在内联函数实现上跟C99标准有差异,兼容做法是函数声明为 static inline。...内联函数兼具函数和宏的优点: 内联函数/函数执行严格的类型检查 内联函数/函数的入参求值只会进行一次 内联函数就地展开,没有函数调用的开销 内联函数函数优化得更好 对于性能敏感的代码,可以考虑用内联函数代替函数式宏

4.3K10

C语言编程规范 clean code

,对应的右大括号需另起一行 左大括号被内容跟随时,对应的右大括号也应跟随内容 规则2.11 结构体和联合体在按成员初始化时,每个成员初始化单独一行 C99标准支持结构体和联合体按照成员进行初始化,标准中叫...建议5.7 内联函数不超过10行(非空非注释) 函数定义成内联一般希望提升性能,但是实际并不一定能提升性能。如果函数体短小,则函数内联可以有效的缩减目标代码的大小,并提升函数执行效率。...规则5.3 被多个源文件调用的内联函数要放在头文件中定义 内联函数是在编译时内联展开,因此要求内联函数定义必须在调用此函数的每个源文件内可见。...gnu89 在内联函数实现上跟C99标准有差异,兼容做法是函数声明为 static inline。...内联函数兼具函数和宏的优点: 内联函数/函数执行严格的类型检查 内联函数/函数的入参求值只会进行一次 内联函数就地展开,没有函数调用的开销 内联函数函数优化得更好 对于性能敏感的代码,可以考虑用内联函数代替函数式宏

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

c++代码整洁之道

变化的点进行封装,做好分界,保持一侧变化,一侧稳定,调用侧永远稳定,被调用侧内部可以变化。...最少惊讶原则:函数功能要与函数名字功能一致,难道你要在一个getter()函数去更改成员变量的值吗?...编辑器 团队可以统一使用相同的编辑器,个人目前使用的是VS Code编辑器,同时每个项目使用统一的.clang_format文件,统一规范代码格式,所有的换行符都要用LF格式,不要用CRLF格式,在右下角可以设置...禁止使用 using 指示, 禁止使用内联命名空间(inline namespace) 一行尽量不要超过120个字符,一个函数尽量不要超过40行,同时一个文件尽量控制在500行内....:本文不是技术文章,介绍较为主观,可能和很多人想法有所冲突,各位可以结合自己的经历经验酌情参考。

1K10

Qt个人配置

配置 代码片段 代码片段是使用相关的关键词进行触发的代码片段插入方法,在Qt中有一定的api支持,一般用于进行函数注释和文件头部注释等 文件头部注释 该片段注释一般用于新文件的项目、创建日期、...文件头部注释的效果 函数注释 函数注释一般用于指示函数功能,参数用意以及返回内容等 ?...函数注释效果 快捷键 快捷键一般用于一些功能的的直接触发,此次配置了代码格式化的功能 ?...clang格式化快捷键配置(与vscode配置一致) 补充:使用clang配置需要打开Qt Creator的插件beautifier(如下图), 然后才能在配置中添加clang的配置,需要添clang-formate...配置beautifier .clangformat文件内容 --- Language: Cpp # BasedOnStyle: WebKit AccessModifierOffset:

74520

Postgresql源码(129)JIT函数中如何使用PG的类型llvmjit_types

模版函数定义: 第一:AttributeTemplate被当做一个函数属性的模板(例如nofree、nosync等clang前端为函数增加的属性),AttributeTemplate是一个简单函数被...clang赋予了一套属性,这些属性在后续处理时倾向被内联。...所以在生成其他函数时,也想用这一套属性,让其他的函数(例如表达式计算函数)也能被内联处理。 第二:作为一些入参是PG_FUNCTION_ARGS的PG函数函数类型模版。...(例如nofree、nosync等clang前端为函数增加的属性),AttributeTemplate是一个简单函数clang赋予了一套属性,这些属性在后续处理时倾向被内联。...在构造表达式计算函数时,使用llvm_copy_attributesAttributeTemplate函数的属性拷贝到了表达式计算函数上面:【AttributeTemplate属性】 → 【evalexpr

5500

常用的gcc的__attribute__

__attribute __(noinline):防止考虑函数内联 __attribute __(packed):指定放置结构或联合的每个成员以最大程度地减少所需的内存。...):定义可以在用户代码中覆盖的库函数 __attribute __(format):由printf使用并指出哪些args具有格式 __ attribute __(const):该函数不读取或修改任何全局内存...不能使用此属性来减少函数的对齐方式,而只能增加它的对齐方式。 __attribute __(unused):附加到变量的此属性意味着该变量可能未被使用。GCC不会对此变量发出警告。...__attribute __(always_inline):通常,除非指定优化,否则函数不会内联。对于内联声明的函数,即使未指定优化级别,此属性也会内联函数。...__attribute __(deprecated):如果在源文件中的任何位置使用该变量,则该属性产生警告。

2K90

BCC和libbpf的转换

Libbpf + BPF CO-RE (Compile Once – Run Everywhere) 选择了一个不同的方式,其思想在于BPF程序视为一个普通的用户空间的程序:需要将其编译成一些小的二进制...libbpf扮演了BPF程序的加载器,负责配置工作(重定位,加载和校验BPF程序,创建BPF maps,附加到BPF钩子上等),开发者需要关注BPF程序的正确性和性能即可。...配置用户空间 生成必要的内容 构建基于libbpf的BPF应用需要使用BPF CO-RE包含的几个步骤: 生成带所有内核类型的头文件vmlinux.h 使用Clang(版本10或更新版本)BPF程序的源代码编译为...probe_read_lim(void *dst, void *src, unsigned long len, unsigned long max) { ... } 从5.5内核开始支持非内联的全局函数...该函数接受printf类的格式,最大支持3个参数。

1.7K00

Es6中模块(Module)的默认导入导出及加载顺序

则导出用export {sub},注意这个双大括号必须要加的,否则就会报错,而在另一模块导入的模块中使用import导入变量对象时,同样要用双大括号 注意1:当单独使用export暴露变量对象,函数,或者类时...可以用一条语句导入所有导出的绑定,例如,如下所示:下面的代码命名为exampleDefault.js export var name = "川川"; // 非默认导出格式 export let desc...(使用export default导出默认值) 在另一个默认块中用import语句中,默认值与非默认格式用逗号隔开,并且默认值的位置在非默认值前面,否则就会报错,示例代码如下所示 import message...双大括号给包裹起来,若是多个变量对象,函数等之间用逗号隔开,对于导出的变量对象,也可以通过as关键字进行重命名 2....)或者加载src中的指定的文件 但是当type属性值为module时就支持加载模块了,type设置为module时,就可以让浏览器所有内联代码或包含在src指定的文件中的代码按照模块而非脚本的方式加载

2.4K40

googl中java、c++编程风格

最重要的一点,每个类应该以某种逻辑去排序它的成员,维护者应该要能解释这种排序逻辑。比如, 新的方法不能总是习惯性地添加到类的结尾,因为这样就是按时间顺序而非某种逻辑来排序的。     ...优点:某些情冴下,非成员函数和静态成员函数是非常有用的,成员函数置亍命名空间中可避免对全 尿作用域的污染。...缺点:成员函数和静态成员函数作为新类的成员戒许更有意义,当它们需要访问外部资源戒具有重要 依赖时更是如此。 ...可以考虑提叏到新类中,戒者函数置亍独立库的命名空间中。...在类定义中,关键字 explicit 加到单参数极造函数前:explicit Foo(string name);   例外:在少数情冴下,拷贝极造函数可以不声明为 explicit;特意作为其他类的透明包装器的类

1K20

CC++ 学习笔记六(文件系统、预处理)

以字节流的方式进行文件操作,很方便的具体的文件格式都归一为相同流式操作,增强了处理文件的灵活性。 文件缓冲区 因为文件存储在外存介质中,对于CPU而言,访问内存的效率要比访问访问内存的效率更加快。...但对于不同的操作系统而言,该结构体会有所区别,所以在使用该函数进行跨平台开发时,就需要在理会其中的具体成员。...10字节处 另外还有一个rewind函数也可以用来位置指针重新指向起始位置,但此函数的与fseek相比无法获知函数是否执行成功。...内联函数 上面也说到,宏可能会有无可避免的副作用,但有时又无可避免的需要使用一小段代码量较小但使用频繁的代码,这时候可以使用内联函数。...内联函数的优点是省了函数调用的开销,也避免了宏的副作用,且也有函数对于参数的严格约束,但其缺点便是若增加目标代码尺寸。

1.3K00

C++最佳实践 | 1. 工具

>= 3.8) -Wformat=2 对输出格式函数(即printf)的安全问题发出警告 -Wlifetime 显示对象生命周期问题(目前只有Clang的特殊分支) 考虑使用-Weverything...的转换,可能丢失数据 /w14254 'operator': 从“type1:field_bits”到“type2:field_bits”的转换,可能丢失数据 /w14263 'function': 成员函数不重写任何基类虚成员函数...考虑使用警告视为错误的设置,例如MSVC中的/Wx,以及GCC/Clang中的-Werror。...最好的选择是静态分析器作为自动化构建系统的一部分运行,cppcheck和clang可以满足免费选项的要求。...ClangFormat ClangFormat[93]可以自动检查并纠正代码格式,以匹配组织约定。可以参考关于clang-format的系列文章[94]。

3.3K10

2023学习日志

库库不需要main函数,也不会编译为可执行文件,主要作用是为二进制项形式的crate提供函数。...编译器会在下列路径中寻找模块代码:内联,在大括号中,当mod garden后方不是一个分号而是一个大括号在文件 src/garden.rs在文件 src/garden/mod.rs声明子模块可以在除crate...编译器会在以父模块命名的目录中寻找子模块代码:内联,在大括号中,当mod vegetables后方不是一个分号而是一个大括号在文件 src/garden/vegetables.rs在文件 src/garden...as 关键字可以使用as关键字导入的模块进行重命名。...模块拆分为多个文件可以在crate root或父模块文件中声明模块,在相应的文件中具体的实现。子模块需要先在父模块中进行声明,再将其文件放在与父模块同名的目录下。。。

16720

最全面的 Android 编码规范指南

最重要的一点,每个类应该以某种逻辑去排序它的成员,维护者应该要能解释这种排序逻辑。比如, 新的方法不能总是习惯性地添加到类的结尾,因为这样就是按时间顺序而非某种逻辑来排序的。...3.4.2.1 区块划分 建议使用注释源文件分为明显的区块,区块划分如下 常量声明区 UI控件成员变量声明区 普通成员变量声明区 内部接口声明区 初始化相关方法区 事件响应方法区 普通逻辑方法区 重载的逻辑方法区... 如果右大括号是一个语句、函数体或类的终止,则右大括号后换行; 否则不换行。...最重要的一点,每个类应该以某种逻辑去排序它的成员,维护者应该要能解释这种排序逻辑。比如, 新的方法不能总是习惯性地添加到类的结尾,因为这样就是按时间顺序而非某种逻辑来排序的。... 如果右大括号是一个语句、函数体或类的终止,则右大括号后换行; 否则不换行。

1.6K40

实用技能分享,充分利用内联函数内联汇编,内部函数和嵌入式汇编提升代码执行效率和便捷性(2021-12-17)

一、内联函数Inline function: 内联函数就是带inline关键字修饰的函数,作用是函数直接嵌入到调用此函数的代码中,从而降低调用此函数所占用的时间。...二、内联汇编Inline assembler: 内联汇编可以汇编程序指令直接插入到 C 或 C++ 函数中。...通常,如果需要访问在 C 中不可访问的硬件资源或者编写时间关键的代码序列,使用内联汇编非常方便。 内联汇编程序类似 C 函数,也可以有形参和返回值。...cmsis_armcc.h :对应MDK AC5头文件 cmsis_gcc.h : 对应各种基于GCC的编译器头文件 cmsis_clang.h : 对应MDK AC6头文件 cmsis_iccarm.h...需要硬件开平方指令,可以使用__sqrtf,开方操作需要12-14个时钟周期。

1.2K30

Google Java 编程风格指南

当且当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格。 与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。...最重要的一点,每个类应该以某种逻辑去排序它的成员,维护者应该要能解释这种排序逻辑。比如, 新的方法不能总是习惯性地添加到类的结尾,因为这样就是按时间顺序而非某种逻辑来排序的。...如果右大括号是一个语句、函数体或类的终止,则右大括号后换行; 否则不换行。...4.6 空白 4.6.1 垂直空白 以下情况需要使用一个空行: 类内连续的成员之间:字段,构造函数,方法,嵌套类,静态初始化块,实例初始化块。...在函数体内,语句的逻辑分组间使用空行。 类内的第一个成员前或最后一个成员后的空行是可选的(既不鼓励也不反对这样做,视个人喜好而定)。

1K11

Java 编程风格军规,看这一篇就够了

当且当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格。 与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。...最重要的一点,每个类应该以某种逻辑去排序它的成员,维护者应该要能解释这种排序逻辑。比如, 新的方法不能总是习惯性地添加到类的结尾,因为这样就是按时间顺序而非某种逻辑来排序的。...如果右大括号是一个语句、函数体或类的终止,则右大括号后换行; 否则不换行。...4.6 空白 4.6.1 垂直空白 以下情况需要使用一个空行: 类内连续的成员之间:字段,构造函数,方法,嵌套类,静态初始化块,实例初始化块。...在函数体内,语句的逻辑分组间使用空行。 类内的第一个成员前或最后一个成员后的空行是可选的(既不鼓励也不反对这样做,视个人喜好而定)。

93640

C++中类和对象以及成员函数

void GetName(char *name);//1      char *GetName();//2  函数1引进了一个本,修改的本,并不会影响成员变量原本的值;  函数2返回值是成员变量的指针...所以我们在进行函数设计的时候,应尽量避免返回成员变量的指针,修改到成员变量的值导致程序bug。 ...定义在类外格式如下:      void Student::Show();   //Student是类名,::是作用于分辨符,这个是一定要有的,Show()就是成员函数。 ...①如果在类中定义,在函数调用的时候编译器会当做内联函数处理,在调用点将代码展开;  ②如果在类外定义,在函数调用时和普通函数一样,进行栈桢的开辟和回退。 ...,它们都有两个特点:公用的,内联的(无堆栈的开辟和清理)  接下来我们主要讲一下几个成员函数:  现在我们有一个CGoods类,私有成员变量有:物品名称(_name),数量(_amount),价格(_price

1.3K20

Google 出品的 Java 编码规范,强烈推荐,权威又科学!

当且当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格。 与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。...最重要的一点,每个类应该以某种逻辑去排序它的成员,维护者应该要能解释这种排序逻辑。 比如, 新的方法不能总是习惯性地添加到类的结尾,因为这样就是按时间顺序而非某种逻辑来排序的。...4、如果右大括号是一个语句、函数体或类的终止,则右大括号后换行; 否则不换行。...4.6 空白 4.6.1 垂直空白 以下情况需要使用一个空行: 1、类内连续的成员之间:字段,构造函数,方法,嵌套类,静态初始化块,实例初始化块。...2、在函数体内,语句的逻辑分组间使用空行。 3、类内的第一个成员前或最后一个成员后的空行是可选的(既不鼓励也不反对这样做,视个人喜好而定)。

2.6K40
领券