C语言代码规范(四)命名规则

一、宏定义全部字母大写,单词间下划线间隔

#define FLASH_PAGE_SIZE    256
#define FLASH_SECTOR_SIZE  (4  * 1024)
#define FLASH_BLOCK_SIZE   (64 * 1024)
#define FLASH_SIZE         (16 * 1024 * 1024)

 

二、const修饰的常量全部字母大写,单词间下划线间隔

const int MAX_NUM = 100;

 

三、变量名全部小写,单词间下划线间隔

unsigned char flash_read_buffer[256] = {0};

 

四、全局变量应添加前缀"g_",局部变量不需要添加。

unsigned char g_flash_read_buffer[256] = {0};

 

五、函数名首字母大写,单词间下划线间隔。

void Get_Flash_Data(void);

如果涉及到某个模块,应以"模块名_"的格式。

void LED_Init(void);

如果后续涉及到分层,硬件层应添加前缀"HW_",应用层应添加前缀"APP_"。

 

六、命名就要做到自解释

所有的命名都应该要做到自解释,即只看命名就知道它的作用。

本人所在前某公司糟糕的命名示例:

#define DBVALUE_CMD0    0x00
#define DBVALUE_CMD1    0x01
#define DBVALUE_CMD2    0x02
#define DBVALUE_CMD3    0x03

这命名让人抓狂。DB是什么意思?CMD0~3具体是干什么的?

询问作者才知道,DB是拼音。。。地标。。。

地标值命令0~3的作用是什么?命名让人摸不着头脑。

修改:

#define STOP_STATION                        0x00
#define STOP_THEN_TURN_BACK_STATION         0x01
#define STOP_5S_THEN_TURN_BACK_STATION      0x02
#define STOP_5S_THEN_KEEP_FORWARD_STATION   0x03

这样就一目了然,当地标是0x00时,是停止地点;0x01时,是到地点停止后立即转向后方向;0x02时,是到地点停止5S后转向后方向;0x03是到地点停止5S后继续向前。

 

七、严禁使用拼音命名

代码是写给别人看的。待过的公司都有外国客户,给他们的DemoCode比较规范,不需要技术支持他们自己调通了(相比国内某些大公司的码农在有中文注释和中文数据手册的情况下还需要FAE手把手教写代码,真让人唏嘘)。如果DemoCode里全是拼音,不敢想象。别说是外国人,国人有时候也难猜到拼音是什么意思,比如第六点中的DB是什么意思。

前公司代码示例:

unsigned char SHIBAI[6];Usart4_Send_Array(SHIBAI, 6);Delay_CMD_FLAG[Play_Fail_Flag] = DELAY_CMD_LOCK;

SHIBAI->失败,下面的Fail又是什么情况,让人啼笑皆非。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Forbidden You don't have permission to access / on this server PHP

Forbidden You dont have permission to access / on this server PHP 在新安装的谷歌游览器里,打不了PHP网站了,错误显示: Forbidden You dont have permission to access / on this server. 原因还是配置权限问题 解决办法: wa…

Spring 3.1和JPA的持久层

1.概述 本教程显示了如何使用Hibernate作为持久性提供程序使用JPA设置Spring 。 有关使用基于Java的配置和项目的基本Maven pom设置Spring上下文的分步介绍,请参阅本文 。 2. Java的JPA Spring配置 要在Spring项目中使用JPA, 需要设置EntityManager 。…

150928错误认识

1. $arr array(); foreach ($re as $k>$v){  $arr[] $v[updatetime];} $arr的返回结果为: Array ([0] > 2014-09[1] > 2015-04[2] > 2015-09 )$arr array(); foreach ($re as $k>$v){  $arr[$k] $v[updatetime];} $arr的返回结果为&#xff…

STM32F1笔记(一)GPIO输出

GPIO:General Purpose Input Output (通用输入/输出)。 GPIO最经典应用:LED灯。 先看电路。声明:参考正点原子战舰开发板。 与LED串联的电阻称为限流电阻。 限流电阻计算公式:R(U-LED压降)/20ma。 U为LE…

dataframe转化为array_【Python专栏】12 种高效 Numpy 和 Pandas 函数为你加速分析

来源:机器之心编译:Jamin、杜伟、张倩我们都知道,Numpy 是 Python 环境下的扩展程序库,支持大量的维度数组和矩阵运算;Pandas 也是 Python 环境下的数据操作和分析软件包,以及强大的数据分析库。二者在日常…

具有GlassFish和一致性的高性能JPA –第1部分

您以前听说过连贯性吗? 大概是。 它是那些著名的内存网格解决方案之一,该解决方案承诺了超快的数据访问速度和对经常使用的数据的无限空间。 一些众所周知的竞争对手是Infinispan , Memcached和Terracotta Ehcache 。 它们都很棒,…

如何在自己的代码中实现分享视频文件或者是图片文件到微信 QQ微博 新浪微博等!!!...

首先在文档第一句我先自嘲下 , 我是大傻逼, 弄了两天微信是视频分享,一直被说为啥跟系统的相册分享的不一样,尼玛!!! 这里来说正文,我这里不像多少太多,大家都是程序猿&a…

sql 数据库中用创建好的视图修改表数据

只要满足下列条件,即可通过视图修改基础基表的数据: 1、任何修改(包括 UPDATE、INSERT 和 DELETE 语句)都只能引用一个基表的列。 2、视图中被修改的列必须直接引用表列中的基础数据。不能通过任何其他方式对这些列进行派生&#…

boost原理与sklearn源码_机器学习sklearn系列之决策树

一、 Sklearn库 Scikit learn 也简称 sklearn, 自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了。支持包括分类、回归、降维和聚类四大机器学习算法。还包含了特征提取、数据处理和模型评估三大模块。sklearn是Scipy的扩展,建立在NumPy和…

STM32F1笔记(二)GPIO输入

STM32 GPIO输入的经典应用是按键。 先看电路。声明:参考正点原子战舰开发板。 在这里可以看到,KEY_UP按键是高电平有效的,即当按下该按键时,GPIO读到高电平。 KEY0/1/2是低电平有效的,即当按下该按键时,G…

Google Authenticator:将其与您自己的Java身份验证服务器配合使用

用于移动设备的Google Authenticator应用程序是一个非常方便的应用程序,它实现了TOTP算法(在RFC 6238中指定)。 使用Google Authenticator,您可以生成时间密码,该密码可用于在共享请求用户密钥的身份验证服务器中授权用…

[Week2 作业] 代码规范之争

这四个问题均是出自 http://goodmath.scientopia.org/2011/07/14/stuff-everyone-should-do-part-2-coding-standards/ 。 我对这四个问题均持反驳的看法,下面是我的理由~ Q1:这些规范都是官僚制度下产生的浪费大家的编程时间、影响人们开发效率, 浪费时…

STM32F1笔记(三)UART/USART

UART:Universal Asynchronous Receiver/Transmitter(通用异步收/发器) USART:Universal Synchronous/Asynchronous Receiver/Transmitter(通用同步/异步串行收/发器) 从命名即可看出USART就是UART的基础上…

python安装界面翻译_python环境搭建

如果想要运行python需要有解释器和编辑器。 什么是解释器 解释器我们可以把它理解成翻译官,它是将我们写的python代码翻译成计算机能够懂得机器语言。 然后计算机收到解释器的命令来干活,最终再将结果反馈在解释器中。 解释器推荐使用anaconda3 什么是an…

无需重新部署Eclipse和Tomcat即可进行更改

他们说,由于应用程序服务器过大,Java的开发速度很慢–您必须重新部署应用程序才能看到所做的更改。 使用PHP,Python等脚本语言时,可以“保存并刷新”。 这个法定问题总结了这个“神话”。 是的,这是一个神话。 您也可以…

进阶篇-用户界面:4.Android中常用组件

1.下拉菜单 在Web开发中&#xff0c;HTML提供了下拉列表的实现&#xff0c;就是使用<select>元素实现一个下拉列表&#xff0c;在其中每个下拉列表项使用<option>表示即可。这是在Web开发中一个必不可少的交互性组件&#xff0c;而在Android中的对应实现就是Spinne…

收款单单据编号不正确

问题现象:现在在应收&#xff0c;应付的收款单录入和付款单录入里点击增加的话&#xff0c;单据编号如果是出现2024呢&#xff0c;按保存的话&#xff0c;就会出现单据号重复&#xff1b;查到的最大的单据号是3034&#xff0c;在流水号里改成3038后再增回加的话还是出现2024。然…

STM32F1笔记(四)NVIC中断优先级管理

STM32将中断分为5个组&#xff0c;组0~4。配置代码如下&#xff1a; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 在标准库里&#xff0c;分组的定义如下&#xff1a; /** defgroup Preemption_Priority_Group * {*/#define NVIC_PriorityGroup_0 ((uint32_t…

到底是什么程序和功能?

许多RDBMS支持“例程”的概念&#xff0c;通常将其称为过程和/或函数。 这些概念已经在编程语言中存在了一段时间了&#xff0c;而且不在数据库中。 区分程序和功能的著名语言是&#xff1a; 艾达 基本知识 帕斯卡 等等… &#xff08;存储的&#xff09;过程和&#xff08…

http的“无连接”指的是_http协议无状态中的 quot;状态quot; 到底指的是什么?...

引子&#xff1a;最近在好好了解http&#xff0c;发现对介绍http的第一句话【http协议是无状态的&#xff0c;无连接的】就无法理解了&#xff1a;无状态的【状态】到底指的是什么&#xff1f;&#xff01;找了很多资料不仅没有发现有一针见血正面回答这个问题的&#xff0c;而…