Keil平台下C语言书写格式规范整理

本文详细介绍了代码编写的标准和规范,涵盖代码风格、标识符命名、全局变量管理、函数使用及注释风格等内容,旨在提升代码质量和团队协作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、文档简介

一份编写规范的代码会让人赏心悦目,养成良好的代码编写习惯是每一个程序员应该具备的基本素养!

      当项目需要多人合作共同编写的时候,共同的风格、方式就变得尤为重要,代码配合的效率也会提高,因此编写本来规范代码编写的风格,请各位工程师参照。当然如果有不同的见解或需要增加的内容,请直接沟通。

二、整体风格编排

针对总的书写格式,包括对齐、缩进、空格、括号等等标准,需要使用Astyle软件辅助配置,配置方式参照如下

AStyle all files:!E $E*.c $E*.h --style=allman --indent=spaces=4 --indent-preproc-block --pad-oper --pad-header --unpad-paren --suffix=none --align-pointer=name --lineend=linux --convert-tabs --delete-empty-lines --break-blocks -p -U --break-elseifs --verbose

AStyle current file :-n !E --style=allman --indent=spaces=4 --indent-preproc-block --pad-oper --pad-header --unpad-paren --suffix=none --align-pointer=name --lineend=linux --convert-tabs --delete-empty-lines --break-blocks -p -U --break-elseifs --verbose

AStyle的安装方法参照链接:https://blog.youkuaiyun.com/LeonSUST/article/details/84994737?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

三、细节描述

3.1标识符命名规则

1)标识符应当直观且简介,可望文知意,不必进行“解码”。

例如:标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词一般不会太复杂,用词应当准确。例如不要把Current_Value写成Now_Value。

2)标识符的长度应当符合“min-length&&max-information”原则,单词最长不超过5个。

3)命名规格尽量与所采用的开发工具的风格一致。

例如,程序中的标识符通常采用大小写混排的方式,加下划线,比如Add_Child。一个单词的可以小写,例如value。

4)程序中不要出现仅靠大小写区分的相似的标识符

5)变量的名字应当使用名词或形容词+名词

6)用正确的反义词组命名具有互斥意义的变量或相反动作的函数等

7)尽量避免使用名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。

8)常量全用大写字母,用下划线分割单词

9)静态变量加前缀s_(表示static)

10)如果不得已需要使用全局变量,则使全局变量前加前缀g_(表示global,暂时不用)

11)宏定义全部要大写,单词之间用下划线分开

12)变量类型全部使用u8 、u16、s16等sys.h中的数据类型

13)函数的命名与变量相同

14)禁止无参数的函数命名时()内为空,应填写void

15)函数的传递参数不超过5个

3.2 长代码和判断语句书写规范

1)同一行代买最长不超过80个字符,否则换行编写

2)如果程序中需要使用数字进行逻辑判断,数字在前。例如if(5==Value)

3)判断中建议使用≥和≤替代>和<

4)判断条件最好不要使用数字,数字用宏定义或布尔量代替,除非能特别直观的知道数字的代表含义。同样,for()中的截止条件最好也不用数字

3.3全局变量的书写规范

1)在不必要的情况下避免使用全局变量

2)全局变量如果作用于只是在同一文件中的其他地方调用,就用static限定其作用域(非必要)。

3)全局变量如果作用是多个文件,定义写在xx.c文件中,声明写在对应的xx.h文件中,并且用extern关键字声明

3.4 主循环或中断中延时和嵌套的处理

1)主循环或中断中,非必要情况下避免使用delay()函数进行延时。主循环中的延时评估是否可以使用定时器的定时功能替代。

2)在多重循环逻辑中,应将最忙的循环放在最内层。例如

for (row = 0; row < 100; row++)

{

        for (col = 0; col < 5; col++)

        {

                sum += a[row][col];

        }

应该改为

for (col = 0; col < 5; col++)

{

        for (row = 0; row < 100; row++)

        {

                sum += a[row][col];

        }

3)避免循环体中包含判断语句,如果确实需要,考虑是否可以把判断语句放在循环体外

4)尽量使用乘法、位与其它方法替代除法

5)非特殊情况,不同类型的中断设置不同的抢占优先级

3.5函数的使用

1)函数的传递参数不超过5个

2)对于不需要数值回传的使用值传递的方式

3)函数优先使用返回值,而不是输出函数

4) 使用强类型参数,避免使用void*

四、.C和.H文件的说明

1)具有单独功能的.c文件都需要配备对应的.h文件,特殊情况除外

2).c文件建议不超过2000行

3).c文件中必须是同一类型功能的函数,实现不同功能的函数不能放在同一个c文件中。例如:ADC的采集和继电器的控制不应放在一起

4).c文件中禁止包含用不到的.h文件,如果发现及时删除

5)每一个功能都建立一个readme.txt的文件,对于调试进度、工程修改、待调试的问题和想法,都需要写明。

五、注释的风格

5.1文件头部注释

文件头绪应当注释出
作者:

版本:

文件功能描述:

修改记录:

日期:

特殊说明:

5.2函数头部注释

函数头部注释使用/**********************/模式,需要写明的参数有

函数名:

函数功能:

输入参数:

输出参数:

返回值:

5.3数据结构的注释

数据结构声明(包括结构、类、枚举),如果其命名不是充分注释的,必须加注释。低于数据结构的注释应放在其上方相邻的位置,不可放在下面;对结构中的每个域的注释放在此域的右方。

/* sccp interface with sccp user primitive message name */

enum    SCCP_USER_PRIMITIV

{

        N_UNITDATA_IND,   /* sccp notify sccp user unit data come */

        N_NOTICE_IND,      /* sccp notify user the No.7 network can not */

                               /* transmission this message */

        N_UNITDATA_REQ,     /* sccp user's unit data transmission request*/

};

5.4对变量的注释

变量在定义时要写明其功能,取值范围

5.5 注释的注意事项

1)注释的原则是有助于理解阅读,语言必须准确、易懂、简洁

2)边写代码边注释,修改代码的同事修改相应注释,以保证注释与代码的一致性。不再有用的注释要删除。

3)注释的内容要清楚、明了,含义准确,防止注释二义性,错误的注释不烦无益反而有害

4)对代码的注释应该在其上方或右方相邻位置,不可放在下面,如放在上方需与其上面的代码用空行隔开

《编译原理》是计算机科学中一门极为重要的课程,主要探讨如何将高级程序设计语言转换成机器可执行的指令。清华大学的张素琴教授在这一领域有着深厚的学术造诣,其编译原理课后习题答案对于学习者而言是非常珍贵的资源。这份压缩文件详细解析了课程中所涉及的概念、理论和方法的实践应用,目的是帮助学生更好地理解编译器设计的核心内容。 编译原理的核心知识点主要包括以下几点: 词法分析:作为编译过程的首要环节,词法分析器会扫描源代码,识别出一个个称为“标记”(Token)的最小语法单位。通常借助正则表达式来定义各种标记的模式。 语法分析:基于词法分析产生的标记流,语法分析器依据文法规则构建语法树。上下文无关文法(CFG)是编译器设计中常用的一种形式化工具。 语义分析:这一步骤用于理解程序的意义,确保程序符合语言的语义规则。语义分析可分为静态语义分析和动态语义分析,前者主要检查类型匹配、变量声明等内容,后者则关注运行时的行为。 中间代码生成:编译器通常会生成一种高级的中间表示,如三地址码或抽象语法树,以便于后续的优化和目标代码生成。 代码优化:通过消除冗余计算、改进数据布局等方式提升程序的执行效率,同时不改变程序的语义。 目标代码生成:根据中间代码生成特定机器架构的目标代码,这一阶段需要考虑指令集体系结构、寄存器分配、跳转优化等问题。 链接:将编译后的模块进行合并,解决外部引用,最终形成一个可执行文件。 错误处理:在词法分析、语法分析和语义分析过程中,编译器需要能够检测并报告错误,例如语法错误、类型错误等。 张素琴教授的课后习题答案覆盖了上述所有核心知识点,并可能包含实际编程练习,比如实现简单的编译器或解释器,以及针对特定问题的解题策略。通过解答这些习题,学生可以加深对编译原理的理解,提升解决问题的能力,为今后参与编译器开发或软件工程实践奠定坚实的基础。这份资源不仅是学习编译原理的有力辅助材料,也是
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值