硬汉嵌入式论坛

 找回密码
 立即注册
查看: 18654|回复: 15
收起左侧

安富莱C语言编码规范 1--文件与目录

  [复制链接]

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
发表于 2018-3-14 16:09:40 | 显示全部楼层 |阅读模式
本帖最后由 席萌0209 于 2020-3-19 19:53 编辑

安富莱C语言编码规范 1--文件与目录

1、文件及目录的命名规定可用的字符集是[A-Z;a-z;0-9;._-]。

2、源文件名后缀用小写字母 .c .h

3、文件的命名要准确清晰地表达其内容,同时文件名应该精练,防止文件名过长而造成使用不便。在文件名中可以适当地使用缩写。
以下提供两种命名方式以供参考:
(1)各程序模块的文件命名开头 2 个消协字母代表本模块的功能:
如:主控程序为 mpMain.c,mpDisp.c …
(2)不写模块功能标识:
如:主控程序为 Main.c,Disp.c …

4、一个软件包或一个逻辑组件的所有头文件和源文件建议放在一个单独的目录下,这样有利于查找并使用相关的文件,有利于简化一些编译工具的设置。

5、对于整个项目需要的公共头文件,应存放在一个单独的目录下(例如:myProject/include)下,可避免其他编写人引用时目录太过分散的问题。

6、对于源码文件中的段落安排,我们建议按如下的顺序排列:
a. 文件头注释
b. 防止重复引用头文件的设置
c. #include 部分
d. #define 部分
e. enum 常量声明
f. 类型声明和定义,包括 struct、union、typedef 等
g. 全局变量声明
h. 文件级变量声明
i. 全局或文件级函数声明
j. 函数实现。按函数声明的顺序排列
k. 文件尾注释

7、在引用头文件时,不要使用绝对路径。如果使用绝对路径,当需要移动目录时,必须修改所有相关代码,繁琐且不安全;使用相对路径,当需要移动目录时,只需修改编译器的某个选项即可。
例如:
  1. #include “/project/inc/hello.h” /* 不应使用绝对路径 */
  2. #include “../inc/hello.h” /* 可以使用相对路径 */
复制代码


8、在引用头文件时,使用 <> 来引用预定义或者特定目录的头文件,使用 “” 来引用当前目录或者路径相对于当前目录的头文件。
  1. #include <stdio.h> /* 标准头文件 */
  2. #include <projdefs.h> /* 工程指定目录头文件 */
  3. #include “global.h” /* 当前目录头文件 */
  4. #include “inc/config.h” /* 路径相对于当前目录的头文件 */
复制代码

9、为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预处理块。
  1. #ifndef __DISP_H /* 文件名前名加两个下划线“__”,后面加 “_H”
  2. #define __DISP_H
  3. ...
  4. ...
  5. #endif
复制代码


10、头文件中只存放“声明”而不存放“定义”,通过这种方式可以避免重复定义。
  1. /* 模块 1 头文件: module1.h */
  2. extern int a = 5; /* 在模块 1 的 .h 文件中声明变量 */
复制代码
  1. /* 模块 1 实现文件:module1.c */
  2. uint8_t g_ucPara; /* 在模块 1 的 .h 文件中定义全局变量 g_ucPara */
复制代码


11、如果其它模块需要引用全局变量 g_ucPara, 只需要在文件开头包含 module1.h
  1. /* 模块 2 实现文件:module2.c */
  2. #include “module1.h” /* 在模块 2 中包含模块 1 的 .h 文件 */
  3. ......
  4. g_ucPara = 0;
  5. ......
复制代码


12、对于文件的长度没有非常严格的要求,但应尽量避免文件过长。一般来说,文件长度应尽量保持在 1000 行之内。

努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

32

主题

295

回帖

391

积分

高级会员

积分
391
发表于 2018-6-14 08:57:05 | 显示全部楼层
赞,感谢分享,小公司代码规范太重要了,要不然一个人离职会导致所留下的代码难以接手
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2019-7-13 19:05:56 | 显示全部楼层
学习了,非常感谢,版主辛苦了
回复

使用道具 举报

0

主题

10

回帖

10

积分

新手上路

积分
10
发表于 2019-8-19 13:26:28 | 显示全部楼层
这是真正做技术的人!&#128077;
回复

使用道具 举报

3

主题

52

回帖

61

积分

初级会员

积分
61
发表于 2019-11-1 13:37:35 | 显示全部楼层
版主有完整版的pdf吗想经常翻翻看看
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2020-3-25 17:52:38 | 显示全部楼层
安富莱代码规范PDF  个人做小部分修改
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2020-3-26 09:13:34 | 显示全部楼层
汪金阳 发表于 2019-11-1 13:37
版主有完整版的pdf吗想经常翻翻看看

暂时没有做PDF版的。
回复

使用道具 举报

4

主题

21

回帖

33

积分

新手上路

积分
33
发表于 2021-4-6 11:00:01 | 显示全部楼层
extern声明后赋值不就是定义了吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2021-4-7 08:12:29 | 显示全部楼层
1010186930 发表于 2021-4-6 11:00
extern声明后赋值不就是定义了吗

extern的话,不能再赋值,用的是原定义处做的赋值。

不知道你咨询的是这个。
回复

使用道具 举报

4

主题

21

回帖

33

积分

新手上路

积分
33
发表于 2021-4-7 16:37:22 | 显示全部楼层
eric2013 发表于 2021-4-7 08:12
extern的话,不能再赋值,用的是原定义处做的赋值。

不知道你咨询的是这个。

    /* 模块 1 头文件: module1.h */
    extern int a = 5; /* 在模块 1 的 .h 文件中声明变量 */

我是指这条语句不是在定义a吗?应该不是声明的意思吧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2021-4-8 09:24:38 | 显示全部楼层
1010186930 发表于 2021-4-7 16:37
/* 模块 1 头文件: module1.h */
    extern int a = 5; /* 在模块 1 的 .h 文件中声明变量 */

对。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2021-7-19 11:26:24 | 显示全部楼层
根据安富莱C语言编码规范1-6整理的PDF版本

C语言编码规范.pdf

227.55 KB, 下载次数: 101

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2021-7-19 11:57:04 | 显示全部楼层
Valley 发表于 2021-7-19 11:26
根据安富莱C语言编码规范1-6整理的PDF版本

谢谢,这个有PDF版

安富莱C语言规范PDF版
http://www.armbbs.cn/forum.php?m ... id=98500&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

5

主题

14

回帖

29

积分

新手上路

积分
29
发表于 2021-9-11 09:51:24
我记得之前 林锐博士写过一份 规范,挺早的年代了

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-1-20 20:47:19 | 显示全部楼层
关于第10条的第二个代码块的注释
/* 在模块 1 的 .h 文件中定义全局变量 g_ucPara */
应该指的是
/* 在模块 1 的 .h 文件中extern uint8_t g_ucPara; 声明全局变量 g_ucPara */吧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2022-1-21 10:57:01 | 显示全部楼层
西北摸鱼 发表于 2022-1-20 20:47
关于第10条的第二个代码块的注释
/* 在模块 1 的 .h 文件中定义全局变量 g_ucPara */
应该指的是

对。
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2022-3-30 07:04:20 | 显示全部楼层
是的,我也看过林锐得书,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-26 20:42 , Processed in 0.354494 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表