找回密码
 注册
关于网站域名变更的通知
查看: 1942|回复: 32
打印 上一主题 下一主题

嵌入式C语言:编出行云流水!

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-23 10:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
0.1 箴言 技术人员设计程序的首要目的是用于技术人员沟通和交流,其次才是用于机器执行。程序的生命力在于用户使用,程序的成长在于后期的维护及根据用户需求更新和升级功能。
如果你的程序只能由你来维护,当你离开这个程序时,你的程序也和你一起离开了,这将给公司和后来接手的技术人员带来巨大的痛苦和损失。
因此,为了程序可读、易理解、好维护,你的程序需要遵守一定的规范,你的程序需要设计。
“程序必须为阅读它的人而编写,只是顺便用于机器执行。”
    —— Harold Abelson 和 Gerald Jay Sussman
“编写程序应该以人为本,计算机第二。”
—— Steve McConnell
0.1 简介
为提高产品代码质量,指导仪表嵌入式软件开发人员编写出简洁、可维护、可靠、可测试、高效、可移植的代码,编写了本规范。
本规范将分为完整版和精简版,完整版将包括更多的样例、规范的解释以及参考材料(what & why),而精简版将只包含规则部分(what)以便查阅。
在本规范的最后,列出了一些业界比较优秀的编程规范,作为延伸阅读参考材料。
本规范主要包含以下两个方面的内容:
一:为形成统一编程规范,从编码形式角度出发,本规范对标示符命名、格式与排版、注释等方面进行了详细阐述。
二:为编写出高质量嵌入式软件,从嵌入式软件安全及可靠性出发,本规范对由于C语言标准、C语言本身、C编译器及个人理解导致的潜在危险进行说明及规避。
0.3 适用范围
本规范适用于XXX股份有限公司仪表台秤产品部嵌入式软件的开发,也对其他嵌入式软件开发起一定的指导作用。
0.4 术语定义
0.4.1 规范术语
原则:编程时必须坚持的指导思想。
规则:编程时需要遵循的约定,分为强制和建议(强制是必须遵守的,建议是一般情况下需要遵守,但没有强制性)。
说明:对原则/规则进行必要的解释。
实例:对此原则/规则从正、反两个方面给出例子。
材料:扩展、延伸的阅读材料。
Unspecified:未详细说明的行为,这些是必须成功编译的语言结构,但关于结构的行为,编译器的编写者有某些自由。例如C语言中的“运算次序”问题。这样的问题有 22 个。
在某种方式上完全相信编译器的行为是不明智的。编译器的行为甚至不会在所有可能的结构中都是一致的。
Undefined:未定义行为,这些是本质的编程错误,但编译器的编写者不一定为此给出错误信息。相应的例子是无效参数传递给函数,或函数的参数与定义时的参数不匹配。从安全性角度这是特别重要的问题,因为它们代表了那些不一定能被编译器捕捉到的错误。
Implementation-defined:实现定义的行为,这有些类似于“unspecified ”问题,其主要区别在于编译器要提供一致的行为并记录成文档。换句话说,不同的编译器之间功能可能会有不同,使得代码不具有可移植性,但在任一编译器内,行为应当是良好定义的。
比如用在一个正整数和一个负整数上的整除运算“/ ”和求模运算符“% ”。存在76个这样的问题。
从安全性角度,假如编译器完全地记录了它的方法并坚持它的实现,那么它可能不是那样至关重要。尽可能的情况下要避免这些问题。
0.4.2 C语言相关术语
声明(declaration):指定了一个变量的标识符,用来描述变量的类型,是类型还是对象,函数等。声明,用于编译器(compiler)识别变量名所引用的实体。以下这些就是声明:
extern int bar;
; n" s0 B7 ?% t+ x3 b6 w; m2 @! V. C0 O4 o3 V; U7 F* R
extern int g(int,int);
$ L8 C+ W# ?9 z. j7 l7 R
  g  }$ }# C3 E1 fdouble f(int,double); [ 对于函数声明,extern关键字是可以省略的 。
定义(definition):是对声明的实现或者实例化。连接器(linker)需要它(定义)来引用内存实体。
与上面的声明相应的定义如下:
int bar;7 x& W7 u9 Z8 }( H7 d

7 x4 d0 v3 c; t# a: j9 `int g(int lhs,int rhs) 6 T6 k8 W+ R& r# G( _, e

6 a7 @* p, V5 Y: k- D{2 C1 c, @% n5 Z: P. d: ]
. q2 t6 Q; W" \- `6 b
    return lhs*rhs;6 s/ P0 V) ^6 f: {/ g0 T# ?8 U1 d- @

9 E( Q3 P* @: y1 S}
  V* [; D0 @5 X* x- D: F& ~
: c4 g7 Z4 s( I- x% E: x  C5 H. \double f(int i,double d) {' W8 D! C1 b' c0 r  Z
" `& l% Z  ]# c2 r# q
    returni+d;! Q0 F& l, L  S- F1 `9 u
3 D9 ]) i2 Z( `% g9 E$ L4 `/ Q
}
0.5 规则的形式
规则/原则<序号>(规则类型):规则内容。                                 
[原始参考]
<序号>:每条规则都有一个序号,序号是按照章节目录-**的形式,从数字1开始。例如,若在此章节有个规则的话,序号为0.5-1。
(规则类型):或者是‘强制’,或者是‘建议’。
规则内容:此条规则的具体内容。
[原始参考]:指示了产生本条款或本组条款的可应用的主要来源。
游客,如果您要查看本帖隐藏内容请回复
[/hide]
* z! y6 J$ C7 W  U0 G6 O

该用户从未签到

推荐
发表于 2022-10-25 14:23 | 只看该作者
没有几年的经验,写不出这样好的文章,谢谢楼主,
  • TA的每日心情
    开心
    2023-6-1 15:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-4-23 10:18 | 只看该作者
    没有几年的经验,写不出这样好的文章,谢谢楼主,

    “来自电巢APP”

  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2020-4-23 10:21 | 只看该作者
    声明这里讲的比较好
  • TA的每日心情
    开心
    2020-7-3 15:12
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    7#
    发表于 2020-4-28 23:57 | 只看该作者
    经验之谈,学习。
  • TA的每日心情
    开心
    2021-6-2 15:49
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    9#
    发表于 2020-5-9 10:05 | 只看该作者
    经验之谈,学习

    该用户从未签到

    11#
    发表于 2020-5-14 23:24 | 只看该作者
    好好学习了,谢谢了

    该用户从未签到

    12#
    发表于 2020-5-27 15:54 | 只看该作者

    该用户从未签到

    13#
    发表于 2020-6-4 10:20 | 只看该作者
    经验之谈,学习学习
    & }+ X$ @+ z* {' S8 |& b

    该用户从未签到

    15#
    发表于 2020-6-22 11:57 | 只看该作者
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-29 17:57 , Processed in 0.140625 second(s), 25 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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