〇、前言
一、排版格式
0.在同一个项目中的所有代码应保持一致的代码风格,引用第三方库文件源码的除外。
1.代码行首缩进使用TAB键,TAB宽度设置为4个字符。
2. 一条语句占一行,不要把多条语句写到一行。
3. 每行代码不要超过100个字符,含有字符串的语句可酌情延长(如打印日志)。
4. 这些关键字须独占一行:if、else、for、do、while、switch、case、default等。
5. 所有的if、else、for、do、while语句后面都要加上花括 {}。
6. 代码块的花括 {}应独占一行,并且保持代码块和花括 缩进对齐。
7. 相对独立的代码块之间应添加一个空行分隔开。
8. 在文件末尾添加一个空行。
9. 定义指针变量时星 的位置应远离类型,向右靠近变量。
10.函数的多个参数之间使用一个空格隔开,有利于阅读。
二、注释
三、命名规则
0.标识符的命名要简洁明了,能够通过名称直观地了解到该标识符所表达的含义。
1.通常用一个或多个英文单词来命名,原则上禁止使用中文拼音,多个单词之间用下划线连接。
2.遇到太长的英文单词可以采用缩写的形式,缩写可以去掉元音字母或者截取单词的前面几个字母,尽量采用大家都能理解的缩写单词。
3.对于理解有困难的缩写应该加以注释。
4.变量、函数、结构体、类型定义标识符使用小写字母。
6.宏、常量、枚举成员使用大写字母。
6. 循环变量等具有特殊含义的变量可以使用单个字符作为变量名字(形如i、j、k)。
7. 变量命名不要在变量名前面添加冗余类型前缀。
例如:unsigned int ui_size;
改为:unsigned int size;
8. 防止全局变量和静态变量与局部变量冲突,可添加特定前缀(g_、m_)表明作用域。
9. 使用typedef定义的类型标识符使用“_t”做为后缀。
10. 作用域为全局范围的函数、宏、枚举成员,应使用模块化的命名规则。即:以模块/对象名作为前缀。
四、声明与定义
0.尽量使用编程语言提供的标准数据类型,如char、int、float等。
1.不要自行定义固定字长的数据类型,因为标准库
2.谨慎使用条件编译功能,因为条件编译会降低代码可读性。
3.项目中广泛引用的数据类型或定义,应考虑把它们集中到一个头文件中,如
4.频繁使用的代码块应考虑定义成为函数。
5.避免随机乱序定义变量,将具有关联性的变量定义放到一起。
6.文件内部引用的全局变量和函数必须加上static声明。
7.被引用的枚举类型应使用typedef定义为自定义类型。
8.结构体的使用者如果不会访问其成员变量,则应使用typedef定义为自定义类型。
9.每个.c文件最多只能有一个与之对应的.h头文件声明其对外输出的接口函数。
10.明确头文件的使用者,不要在头文件中定义使用者不关心的数据定义或函数。
五、 模块化编程
0.模块化编程即是把整个项目代码分解为一个个功能独立的模块,良好的模块化设计可以极大地提高代码的维护性和复用性。
1.一个模块通常由一个或多个.c源文件和一个声明接口的.h头文件组成。
2.模块化设计的关键在于分解功能,一个模块只实现较为独立的单一功能。
3.根据模块所实现的功能大致分为应用层、功能层、驱动层,可以细分更多层次。
4.应用层属于最顶层,是整个项目业务需求最直观的体现,依赖于下层的模块。应用层的模块通常提供的接口函数很少,且都是初始化、启动、停止等操作。
5.功能层属于中间层,一般用于连接应用层和驱动层的桥梁,是实现业务需求的支柱。功能层的模块通常处理驱动层的数据传递给应用层,比如协议解析,数据处理等。
6.驱动层属于最低层,负责和底层硬件打交道,只处理硬件数据,不关心具体应用。因此驱动层的代码应该具有很强的可复用性,在不同的项目中应该可以直接重复使用。
7.函数调用层次需遵循上层模块调用同层或下层模块的接口,切勿在底层模块中直接调用上层模块的函数。
8.模块之间通信使用轮寻或回调函数的方式,降低各模块之间的耦合性。
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览114810 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!