热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c语言程序设计南京工业大学,12南京工业大学嵌入式C语言编程规范_v24.pdf

自动化与电气工程学院自动化与电气工程学院嵌入式嵌入式C语言编程规范语言编程规范日期日期20131231版本版本V24整理整理王晓荣王晓荣一一规范说明规范说明本规范作为南京工业大学自

自动化与电气工程学院自动化与电气工程学院 嵌入式嵌入式 C 语言编程规范语言编程规范 日期日期 2013 12 31 版本版本 V2 4 整理整理 王晓荣王晓荣 一 一 规范说明规范说明 本规范作为南京工业大学自动化与电气工程学院教师 学生从事嵌入式 C 语言等相关开发 工作的编程规范 带有索引性质 力求简洁明了 请遵照此规范进行嵌入式 C 语言编程教学和 学习 二 二 命名规则命名规则 通用命名规则通用命名规则 1 移植代码和修改部分代码时 保持原命名风格 2 目录名 目录名 文件名 函数名 文件名 函数名 参数名 参数名 变量名变量名等 如果无特殊的需求 如果是引用其他地方 可以保留相应的名称 均采用 Uinx 风格 全小写全小写 下划线下划线 特别注明除外 说明 不同系统对文件名大小写处理不同 MS 的 DOS Windows 不区分大小写 但是 Linux 系统则区分 所以代码文件命名建议统一采用全小写字母命名 示例 3 禁止使用单字节单字节命名变量 但允许定义 i j k 作为局部循环变量 4 除了常见的通用缩写通用缩写 附录 A 以外 不使用单词缩写 不得使用汉语拼音 5 用正确的反义词组反义词组 附录 B 命名具有互斥意义的变量或相反动作的函数等 变量名变量名 6 全局变量全局变量和全局全局静态静态变量变量添加前缀 说明 全局变量十分危险 全局变量十分危险 能不用则不用能不用则不用 不得不用时 通过前缀使得全局变量更加醒目 促使使用时更加小心 单个文件内部使用全局变量 应加 static 关键字进行封装 变成全局静态变量 示例 变量类型变量类型 7 基本变量类型基本变量类型用 typedef 按以下形式定义 移植或修改的文件 保持原风格 8 非基本变量类型 如结构 指针 枚举 共同体结构 指针 枚举 共同体不得使用 typedef 形式定义 移植或修改 的文件 保持原风格 规范的使用方法如下示例 说明 使用 typedef 会隐藏这个变量实际上是什么类型 在传递参数会增加出错概率 示例 结构体声明与定义 枚举类型声明与定义 宏 枚举成员命名宏 枚举成员命名 9 宏 枚举成员宏 枚举成员采用 全大写全大写 下划线下划线 形式 示例 注 除了头文件或编译开关等特殊标识定义 宏定义不能使用下划线 开头和结尾 三 三 程序格式程序格式 10 程序块采用缩进风格编写 每级缩进为 4 个空格个空格 说明 将编辑器的 TAB键设置为自动转 4 个空格输入 这样可以防止程序在别的编辑器内打 开时原先的格式排版失效 若干软件相关设置见附录 C 11 每个 符号后都应缩进 唯一例外是 switch case 语句中 case 和 default 应与 对齐 示例 注 switch 语句必须有 default 分支 12 相对独立的程序块之间 变量说明之后必须加空行 示例 不规范格式 规范格式 13 每行语句 80 个字符个字符要拆分换行 注释除外 说明 换行时要增加一级缩进 使代码可读性更好 低优先级操作符处划分新行 换行时操作符应该也放下来 放在新行首 换行时建议一个完整的语句放在一行 不要根据字符数断行 示例 14 二元操作符二元操作符 如 赋值操作符 比较操作符 算术操作符 逻辑操作符 位域操作符 如 等的前后前后都都加空格加空格 15 一元操作符一元操作符 如 地址操作符 以及关系密切的 立即操作符立即操作符 如 等前前后后都都不加空格不加空格 16 逗号 分号只在后面加空格后面加空格 17 指针与引用符号 在变量定义的时候靠右靠右 在函数返回值时靠左靠左 示例 18 多个短语句 包括赋值语句 不允许写在同一行内 即一行只写一条语句 示例 不好的排版 较好的排版 19 if for do while case switch default 等语句自占一行 且 if for do while 等语句 的执行语句部分无论多少都要加括号 当 while 作为循环等待语句时除外 示例 20 如果代码行中的运算符比较多 用括号确定表达式的操作顺序 避免使用默认的优先级 示例 21 尽量避免含有否定运算否定运算的条件表达式 示例 四 四 注释注释 22 注释中英文皆可 注释必须简洁准确 注释的位置应该与被描述的代码相邻 可以放在代 码的上方上方或右方右方 不可放在下方 23 注释全部按照 doxygen 风格风格 示例 文件头部注释 函数头部注释 语句上方注释 语句右方注释 24 修改别人大段代码时 不要轻易不要轻易删除别人的代码 应该用 注释 并注明修改人及日期 示例 五 五 头文件头文件 25 禁止在头文件中定义变量 说明 在头文件中定义变量 将会由于头文件被其他 c 文件包含而导致变量重复定义 26 只能通过包含头文件的方式使用其他 c 提供的接口 禁止在 c 中通过 extern 的方式使用 外部函数接口 变量 说明 若 a c 使用了 b c 定义的 func 函数 则应当在 b h 中声明 int func int input 并在 a c 中通过 include b h 来使用 func 禁止通过在 a c 中直接写 extern int func int input 来使用 func 这种写法容易在 func 改变时可能导致声明和定义不一致 27 头文件中需添加避免重复定义的代码 说明 头文件名和后缀全部大写 两者之间的 用 一个下划线一个下划线 替代 左 侧采用 两个下划线两个下划线 以避免重名 另外也可以根据文件名中是否包含多个词语而采用 连接起来 示例 28 头文件是模块 Module 或单元 Unit 的对外接口 头文件中应放置对外提供的函数 声明 宏定义 类型定义等 说明 内部使用的函数 相当于类的私有方法 声明不应放在头文件中 内部使用的宏 枚举 结构定义不应放入头文件中 六六 函数函数 29 一个函数仅完成一项一项功能功能 30 代码重复超过三次三次时 应该尽可能提炼成函数 消除重复 31 函数有效代码 非空非注释行 不超过 50 行行 移植或修改代码保持原风格 说明 过长的函数往往意味着函数功能不单一 过于复杂 参考 29 条规则 一个函数只 完成一个功能 32 在源文件范围内声明和定义的所有函数 除非外部可见除非外部可见 否则应该增加 static 关键字 33 如果函数入口参数入口参数为空 必须使用 void 作为入口参数 如果函数没有返回值返回值 那么应 声明为 void 类型 34 仅作输入参数使用的指针指针 应在类型前加 const 防止该指针在函数体内被意外修改 说明 目的参数放在前面 源参数放在后面 示例 七七 附录 附录 附录附录 A 全称全称 缩写缩写 全称全称 缩写缩写 address addr list lst administrator adm mailbox mbox application app manage manager mgr man argument arg maximum max assemble asm memory mem asynchronization asyn message msg average avg minimum min back bk multiplex mux buffer buf object obj button btn operating system os calculate calc origin original org character char overflow ovf change chg parameter param check chk password psw clear clr picture pic clock clk pointer ptr column col point pnt pt command cmd position pos compare cmp previous pre prev configuration cfg program prg context ctx print prn control ctrl priority prio copy cpy process procedure proc count cnt properties prop current cur read rd decrease dec receive rcv delay dly ready rdy delete del reference ref destination dest dst register reg device dev register reg dictionary dict request req different diff resource res directory dir return ret disable dis schedule sched document doc second sec driver drv segment seg display disp select sel dynamic dyna source src enable en semaphore sem end of text etx server svr environment env stack stk error err standard std execute exec start of text stx extend ex ext storage stg function func fn string str flag flg summation sum group grp system sys hexadecimal hex synchronize sync i o system ios temporary temp tmp image img translate transation transparent tran trans increase inc test tst index idx text txt information info timer tmr initial initialize initialization init transmit trs insert ins trigger trig length len variable var library lib version ver link lnk write wr 附录附录 B add remove begin end create destroy insert delete first last get release increment decrement put get add delete lock unlock min max open close old new start stop next previous source target show hide send receive source destination copy paste up down 附录附录 C MDK 软件 做如下设置 Source Insight 中 做如下设置 Vim 中 做如下设置 向 Vim 配置文件中添加下列语句

展开阅读全文



推荐阅读
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了PHP常量的定义和使用方法,包括常量的命名规则、大小写敏感性、全局范围和标量数据的限制。同时还提到了应尽量避免定义resource常量,并给出了使用define()函数定义常量的示例。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
author-avatar
mobiledu2502886833
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有