DPDK的代码规范
每个公司都会有自己代码风格或者编程规范,都旨在防范编程语言的一些陷阱或者提高代码效率,还有就是保持一致编码风格来提高代码可读性,方便code review;
或者说代码的一种美学,比如python也就有pep8约定,还有一些精致编码来表示你是否Pythonic。
DPDK也有自己的编码风格,看完颇有受益,这里提取一些个人比较喜欢的风格来参考,尤其是关于结构体部分。
1、注释风格,参考doxygen的使用
单行注释:
/*
* VERY important single-line comments look like this.
*/
或者
/* Most single-line comments look like this. */
多行注释:
/*
* Multi-line comments look like this. Make them real sentences. Fill
* them so they look like real paragraphs.
*/
2、头文件包含
标准库和dpdk提供的库头文件都使用<>包含,其他应用程序的头文件都使用 ""包含
#include <stdio.h>
#include <rte_eal.h>
#include "application.h"
3、预编译头
#ifndef _FILE_H_
#define _FILE_H_
/* Code */
#endif /* _FILE_H_ */
4、结构体定义
(1)声明结构体成员变量的时候,首先按方便使用排序,然后按字节大小排序(从大到小),然后再按字典表排序,并且考虑最小的字节填充来保证字节对齐。
按方便使用排序是意思是把常用的成员变量放在一起,突出整个结构体的逻辑性
(2)对于已经声明好的结构体,如果要添加新的成员,应该添加在结构体的尾部来保证向后兼容,但我个人觉得这个在遵守第(1)条的情况下,才考虑这条。
(3)结构体的每个元素都应该在单独的一行。
(4)成员变量的类型起始对齐,变量名使用空格对齐第一个字符。
(5)对于类型特别长的变量,不方便对齐,就用一个空格的间隔书写。
struct foo {
struct foo *next; /* List of active foo. */
struct mumble amumble; /* Comment for mumble. */
int bar; /* Try to align the comments. */
struct verylongtypename *baz; /* Won't fit with other members */
};
(6)结构体声明放在所使用文件的代码起始部分,或者在一个单独的头文件里,方便其他文件包含。
(7)变量的声明应该与结构体的声明分开,如果在头文件声明变量,应该使用extern。
(8)结构体的定义要避免名字空间冲突,需要加上特有的前缀,比如dpdk是 rte_ 。
5、使用linux的queue macro会比自己实现的list rolling要好。
#include <sys/queue.h>
struct foo {
LIST_ENTRY(foo) link; /* Use queue macros for foo lists. */
struct mumble amumble; /* Comment for mumble. */
int bar; /* Try to align the comments. */
struct verylongtypename *baz; /* Won't fit with other members */
};
LIST_HEAD(, foo) foohead; /* Head of global foo list. */
6、typedef的使用
避免使用typedef来声明结构体类型。
如下声明
struct my_struct_type {
/* ... */
};
struct my_struct_type my_var;
比下面的好:
typedef struct my_struct_type {
/* ... */
} my_struct_type;
my_struct_type my_var
(1)typedef的问题是它会不恰当的隐藏原有的结构体类型。比如,你不知道它define的是结构体自身还是结构体的指针(有人可能会说通过类型+前缀/后缀来区分,众口难调,我也不喜欢那种如 int_ptr 之类的写法)
(2)typedef只能声明一次,而结构体可以通过不完整的形式声明多次,比如 struct my_struct_type;
(3)要使用typedef的类型必须包含它所在的头文件,这个可能造成名词空间污染。
(4)不要使用define来替代typedef,会引起更多的问题,比如 #define pint int * 就会出现连续的变量声明问题。
(5)推荐使用typedef来声明函数指针,可以提高代码可读性
/**
* Definition of a remote launch function.
*/
typedef int (lcore_function_t)(void *);
/* launch a function of lcore_function_t type */
int rte_eal_remote_launch(lcore_function_t *f, void *arg, unsigned slave_id);
DPDK的代码规范的更多相关文章
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- 谈谈PHP代码规范
[转] http://www.syyong.com/php/Talk-about-PHP-code-specification.html 我向往这样一个php世界,里面没有代码规范之争.你我都一样,都 ...
- 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述
对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...
- C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义
类型判断符号: C#:object a; if(a is int) { } 用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...
- 作业三: 代码规范、代码复审、PSP
分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能 ...
- 转!!Java代码规范、格式化和checkstyle检查配置文档
为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...
- C#代码规范
C#代码规范 一.文件命名 1 文件名 文件名统一使用帕斯卡命名法,以C#类名命名,拓展名小写. 示例: GameManager.cs 2 文件注释 每个文件头须包含注释说明,文件头位置指的是文件最 ...
- 【转】Java代码规范
[转]Java代码规范 http://blog.csdn.net/huaishu/article/details/26725539
- 作业三:代码规范、代码复审、PSP
一.代码规范 我认为我们编写的代码都需要进行规范的操作,因为如果为了图省事情或者为了减少时间去完成这个编程.在最后检验的时候就会出现一些警告,导致你这次编程的代码出现问题,当出现问题的时候你在回头去检 ...
随机推荐
- Oracle字符编码与汉字存储长度的处理
执行如下语句,查看汉字在数据库中所占的字节: select vsize('汉') from dual; 一般情况下,得到的结果大部分为值:2 或 3 一般linux下安装oracle数据库,默认字符编 ...
- Wuss Weapp 一款高质量,组件齐全,高自定义的微信小程序 UI 组件库
Wuss Weapp 一款高质量,组件齐全,高自定义的微信小程序 UI 组件库 文档 https://phonycode.github.io/wuss-weapp 扫码体验 使用微信扫一扫体验小程序组 ...
- redis 面试题
https://www.cnblogs.com/ftl1012/p/redisExam.html 1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashM ...
- (转)IDE 而言,是 Xcode 的技术比较先进还是 Visual Studio?
李如一他们弄得那个IT公论,最近有一期是吐槽ObjC的.吐到最后, @涛 吴 说,理想的用户界面语言应该是界面的描述和逻辑分开的,想了半天举不出例子来,其实说的不就是WPF吗?还在用Interface ...
- stat.h头文件,轻松获取文件属性
[以前还为了获取文件的长度,费劲从头读取一遍,一个一个字节的算. 做webserver时候,发现原来stat函数可以返回一个结构,里面包括文件的全部属性. 真是曲折啊.] #i nclude<s ...
- 笔记--tslib 编译
tslib 是qt启动时的一个触屏校正检验程序. 它的配置以及编译比较简单. 第一步, 下载tslib源码包: http://download.csdn.net/detail/MKNDG/329156 ...
- linux-shell——01
没有什么好的标题,只是一些随笔.我用的是linux虚拟机,red hat 7 一:nat模式使得虚拟机可以访问外网,但是这种模式下只可以访问外网,但外面的不能访问里面 首先将虚拟机的网络连接改为nat ...
- Android 拍照或相册选择照片进行显示缩放位图 Demo
拍照后直接使用 BitmapFactory.decodeStream(...) 进行创建 Bitmap 并显示是有问题的. Bitmap 是个简单对象,它只存储实际像素数据,也就是说,即使原始照片已压 ...
- python基础之入门基础
编程语言分类 机器语言 使用二进制代码直接编程,直接与硬件交互,执行速度非常快,灵活,但是开发难度高,开发效率低下,缺乏移植性. 汇编语言 对机器语言指令进行了英文封装,较机器语言容易记忆,直接与硬件 ...
- gcc常用命令
1简介 2简单编译 2.1预处理 2.2编译为汇编代码(Compilation) 2.3汇编(Assembly) 2.4连接(Linking) 3多个程序文件的编译 4检错 5库文件连接 5.1编译成 ...