c语言变量命名规范更新单片机较多较乱文档格式.docx

上传人:b****4 文档编号:6915798 上传时间:2023-05-07 格式:DOCX 页数:35 大小:33.82KB
下载 相关 举报
c语言变量命名规范更新单片机较多较乱文档格式.docx_第1页
第1页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第2页
第2页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第3页
第3页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第4页
第4页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第5页
第5页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第6页
第6页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第7页
第7页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第8页
第8页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第9页
第9页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第10页
第10页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第11页
第11页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第12页
第12页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第13页
第13页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第14页
第14页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第15页
第15页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第16页
第16页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第17页
第17页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第18页
第18页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第19页
第19页 / 共35页
c语言变量命名规范更新单片机较多较乱文档格式.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c语言变量命名规范更新单片机较多较乱文档格式.docx

《c语言变量命名规范更新单片机较多较乱文档格式.docx》由会员分享,可在线阅读,更多相关《c语言变量命名规范更新单片机较多较乱文档格式.docx(35页珍藏版)》请在冰点文库上搜索。

c语言变量命名规范更新单片机较多较乱文档格式.docx

编写高质量的代码不仅可以提高程序执行效率,缩减代码长度,而且对于保证程序的可

靠性也是相当重要的。

事实证明,低效冗长的代码更容易出现错误。

一段高质量代码需要很

多方面的综合配合,如明晰的项目需求、简洁合理的程序结构、出色的文档、高效的语句表

达等,这是一个复杂的工程。

这里只讨论如何编写出高效的表达语句。

后面编程实例中会介

绍如何安排好程序结构。

对此类问题感兴趣的读者可以阅读软件工程方面的相关书籍。

微处理器一般用于特定环境和特定用途,出于成本、功耗和体积方面的考虑,一般都要

求尽量节省使用资源。

并且,由于微处理器的硬件一般都不支持有符号数、浮点数的运算,

且运算位数有限,因此,分配变量时必须仔细。

另外要说明的是,速度和存储器的消耗经常

是两个不可兼顾的目标,多数情况下,编程者必须根据实际情况作出权衡和取舍。

需要注意的事项如下:

(1)通常在满足运算需求的前提下,尽量选择为变量定义字节数少的数据类型。

(2)尽量不用过长的数据类型,如longlong和double。

(3)MSP430不支持位寻址,所以运算中尽量减少位操作。

两种取值的变量,如果RAM容量允许,则可分配为unsignedchar类型,这样可以提高

运算速度。

如果分配成某一字节中的某一位,则可以减少存储器的消耗,但会降低运算

速度。

(4)避免使用浮点数,尽量使用定点数进行小数运算。

如果必须使用浮点数,则尽量使

用32位的float,而不是64位的double。

(5)尽量将变量分配为无符号数据类型。

(6)对于指针变量,如果声明后其值不再改变,则声明成const类型,这样编译器编译

时能够更好地优化所生成的代码。

(7)尽可能使用局部变量而不是全局变量或者静态变量(static)。

这样有利于编译器编

译时更好地优化所生成的代码。

(8)避免对局部变量使用&

取地址符。

因为这样会使编译器无法把此变量放在CPU的寄

存器中,而是放在RAM中,从而失去了优化的机会。

(9)仅在模块内使用的变量声明为staic类型,这样有利于编译器优化。

(10)如果堆栈空间有限,则尽量减少函数调用的层次和递归调用。

(11)如果传送参数过多,则可以将参数组成一个数组或者结构,然后用指针传递。

(12)某些变量在中断程序和普通级别程序中都会被用到,所以必须加以保护。

将变量

声明为volatile类型,编译器优化时就不会移动它,对它的访问也就不会被延迟。

应该保证对

volatile的变量的访问不被打断,为此,可以在访问它的部分加上__monitor声明。

头文件中的内容应该按照固定的顺序编写。

首先使用#include包含语句编写本头文件中.

变量的命名应该基本能够反映变量的数据类型和含义。

一个变量由如下几部分组成:

储类型+数据类型+变量名。

命名规则如下:

存储类型

全局变量:

大小写混用,不同部分之间用大写字母隔开。

局部变量:

全部用小写,不同部分之间用“_”隔开。

数据类型全部用小写字母。

char(无)

inti

floatf

doubled

structs

指针p

数组a

有符号g

变量名使用缩写或者拼音都可以,大小写按照存储类型的规定进行。

举例:

unsignedcharMoonRiver;

//全局无符号字符变量

unsignedcharmoon_river;

//局部无符号字符变量

chargMoonRiver;

//全局有符号字符变量

charg_moon_river;

unsignedintiMoonRiver;

//全局无符号整数变量

unsignedint*piMoonRiver;

//全局指向无符号整数类型的指针变量

unsignedintp_moon_river;

//局部指向无符号整数类型的指针变量

有几种最常用到的变量,这里给出特别定义:

q0、q1、q2...定义为unsignedchar类型,为在函数内部声明的局部变量。

iq0、iq1、iq2...定义为unsignedint类型,为在函数内部声明的局部变量。

fq0、fq1、fq2...定义为float类型,为在函数内部声明的局部变量。

n0、n1、n2...定义为unsignedchar或者unsignedint类型,在函数内部作为循环

次数的计数器使用。

---------------------------------------------------------------------------------------

3.缩略语

由于有几种词义在编程时经常会遇到,所以有必要为它们固定定义一个缩写,这样在遇

到这些缩写的时候就能够很快知道它们所表示的内容,这些缩写称为缩略语。

缩略语在定义

变量和函数名的时候都可以使用。

(1)N下标变量。

如要向一个数组中按顺序填充数据,则需要一个变量保存数组的

下标。

如果数组定义为unsignedintaiMoon[5],那么可以定义保存下标的变量为unsigned

charNMoon,这样就很容易知道这个变量是数组aiMoon的下标,而不会将其误用为其他

用途。

(2)b布尔变量,只有“是”和“非”两种取值的变量。

(3)Tim表示与时间有关的变量。

(4)Cnt计数或计时变量。

程序中经常会对某些事件或者时间进行计数。

如变量

CntTimMs是用来计时的变量,计时单位是毫秒。

(5)Pre上一个变量。

通过指针存取数组时,此缩略语用来表示当前指针所指地址的前

一个地址。

(6)Nt下一个变量。

通过指针存取数组时,此缩略语用来表示当前指针所指地址的下

(7)Sta状态变量。

程序中有时需要定义多个工作的状态,程序根据当前所在的状态来

确定执行何种算法。

含有此缩略语的变量表明此变量保存的是当前程序的工作状态。

(8)Max最大值。

(9)Min最小值。

(10)Init初始化变量。

(11)Sys系统变量。

表明此变量是与整个单片机系统有关的变量。

_NOP();

//空操作,可以作为测试点、延时等。

Windows应用程序的标识符通常采用“大小写”混排的方式,如AddChild。

而Unix应用程序的标识符通常采用“小写加下划线”的方式,如add_child。

别把这两类风格混在一起用。

    【规则1-4】程序中不要出现仅靠大小写区分的相似的标识符。

    例如:

  int x, X;

    //变量x与X容易混淆

  voidfoo(intx);

  //函数foo与FOO容易混淆

  voidFOO(floatx);

    【规则1-5】程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解。

    【规则1-6】变量的名字应当使用“名词”或者“形容词+名词”。

    float value;

  float oldValue;

  float newValue;

    【规则1-7】全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。

类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身。

    DrawBox();

 //全局函数

     box->

Draw();

//类的成员函数

    【规则1-8】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。

  例如:

       int    minValue;

       int   maxValue;

       int   SetValue(…);

       int    GetValue(…);

              

    【建议1-1】尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。

这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。

--------------------------------------------------------------------------------------

2.简单的Windows应用程序命名规则

    作者对“匈牙利”命名规则做了合理的简化,下述的命名规则简单易用,比较适合于Windows应用软件的开发。

    【规则2-1】类名和函数名用大写字母开头的单词组合而成。

  class Node;

     //类名classLeafNode;

      //类名void  Draw(void);

   //函数名void SetValue(intvalue);

 // 函数名

【规则2-2】变量和参数用小写字母开头的单词组合而成。

  BOOflag;

int  drawMode;

    【规则2-3】常量全用大写的字母,用下划线分割单词。

  constintMAX= 100;

     constintMAX_LENGTH= 100;

    【规则2-4】静态变量加前缀s_(表示static)。

  voidInit(…)      {      static ints_initValue;

//静态变量      …     }

    【规则2-5】如果不得已需要全局变量,则使全局变量加前缀g_(表示global)。

    intg_howManyPeople;

   //全局变量

  intg_howMuchMoney;

    【规则2-6】类的数据成员加前缀m_(表示member),这样可以避免数据成员与成员函数的参数同名。

  void Object:

:

SetValue(intwidth,intheight)

  {

  m_width=width;

  m_height=height;

  }

    【规则2-7】为了防止某一软件库中的一些标识符和其它软件库中的冲突,可以为各种标识符加上能反映软件性质的前缀。

例如三维图形标准OpenGL的所有库函数均以gl开头,所有常量(或宏定义)均以GL开头。

 

缩进格式

  Tab是8个字符,于是缩进也是8个字符.有很多怪异的风格,他们将缩进格式定义为4个字符(设置为2个字符!

)的深度,这就象试图将PI定义为3一样让人难以接受.

  理由是:

缩进的大小是为了清楚的定义一个块的开始和结束.特别是当你已经在计算机前面呆了20多个小时了以后,你会发现一个大的缩进格式使得你对程序的理解更容易.

  现在,有一些人说,使用8个字符的缩进使得代码离右边很近,在80个字符宽度的终端屏幕上看程序很难受.回答是,但你的程序有3个以上的缩进的时候,你就应该修改你的程序.

  

总之,8个字符的缩进使得程序易读,还有一个附加的好处,就是它能在你将程序变得嵌套层数太多的时候给你警告.这个时候,你应该修改你的程序.

大符号的位置

  另外一个C程序编程风格的问题是对大括号的处理.同缩进大小不同,几乎没有什么理由去选择一种而不选择另外一种风格,但有一种推荐的风格,它是Kernighan和Ritchie的经典的那本书带来的,它将开始的大括号放在一行的最后,而将结束大括号放在一行的第一位,如下所示:

  if(xistrue){wedoy}

  然而,还有一种特殊的情况:

命名函数:

开始的括号是放在下一行的第一位,如下:

intfunction(intx){bodyoffunction}

  所有非正统的人会非难这种不一致性,但是,所有思维正常的人明白:

(第一)K&

R是___对___的,(第二)如果K&

R不对,请参见第一条.(:

-))......另外,函数也是特殊的,不一定非得一致.

  需要注意的是结束的括号在它所占的那一行是空的,__除了__它跟随着同一条语句的继续符号.如"

while"

在do-while循环中,或者"

else"

在if语句中.如下:

  do{bodyofdo-loop}while(condition);

  以及

  if(x==y){..}elseif(x>

y){...}else{....}

  理由:

K&

R.

  另外,注意到这种大括号的放置方法减小了空行的数量,但却没有减少可读性.于是,在屏幕大小受到限制的时候,你就可以有更多的空行来写些注释了.

命名系统

  C是一种简洁的语言,那么,命名也应该是简洁的.同MODULE-2以及ASCAL语言不同的是,C程序员不使用诸如ThisVariableIsATemporaryCounter之类的命名方式.一个C语言的程序员会将之命名为"

tmp"

这很容易书写,且并不是那么难以去理解.

  然而,当混合类型的名字不得不出现的时候,描述性名字对全局变量来说是必要的了.调用一个名为"

foo"

全局的函数是很让人恼火的.全局变量(只有你必须使用的时候才使用它),就象全局函数一样,需要描述性的命名方式.假如你有一个函数用来计算活动用户的数量,你应该这样命名--"

count_active_users()"

--或另外的相近的形式,你不应命名为"

cntusr()"

.

  有一种称为Hungarian命名方式,它将函数的类型编码写入变量名中,这种方式是脑子有毛病的一种表现---编译器知道这个类型而且会去检查它,而这样只会迷惑程序员.--知道为什么Micro$oft为什么会生产这么多"

臭虫"

程序了把!

!

  局部变量的命名应该短小精悍.假如你有一个随机的整数循环计数器,它有可能有"

i"

如果没有任何可能使得它能被误解的话,将其写作"

loop_counter"

是效率低下的.同样的,"

"

可以是任何临时数值的函数变量.

  如果你害怕混淆你的局部变量的名字,还有另外一个问题,就是称

function-growth-hormone-imbalancesyndrome.

函数

  函数应该短小而迷人,而且它只作一件事情.它应只覆盖一到两个屏幕(80*24一屏),并且只作一件事情,而且将它做好.(这不就是UNIX的风格吗,译者注).

  一个函数的最大长度和函数的复杂程度以及缩进大小成反比.于是,如果你已经写了简单但长度较长的的函数,而且你已经对不同的情况做了很多很小的事情,写一个更长一点的函数也是无所谓的.

  然而,假如你要写一个很复杂的函数,而且你已经估计到假如一般人读这个函数,他可能都不知道这个函数在说些什么,这个时候,使用具有描述性名字的有帮助的函数.

  另外一个需要考虑的是局部变量的数量.他们不应该超过5-10个,否则你有可能会出错.重新考虑这个函数,将他们分割成更小的函数.人的大脑通常可以很容易的记住7件不同的事情,超过这个数量会引起混乱.你知道你很聪明,但是你可能仍想去明白2周以前的做的事情.

注释

  注释是一件很好的事情,但是过多的注释也是危险的,不要试图区解释你的代码是注释如何如何的好:

你应该将代码写得更好,而不是花费大量的时间去解释那些糟糕的代码.

  通常情况下,你的注释是说明你的代码做些什么,而不是怎么做的.而且,要试图避免将注释插在一个函数体里:

假如这个函数确实很复杂,你需要在其中有部分的注释,你应该回到第四章看看.你可以写些简短的注释来注明或警告那些你认为特别聪明(或极其丑陋)的部分,但是你必须要避免过多.取而代之的是,将注释写在函数前,告诉别人它做些什么事情,和可能为什么要这样做.

语法杂项:

A,运算符前后要有各一个空格。

B,在开始圆括号和后一个字符,以及结束圆括号和上一个字符中不出现空格。

不要在语句中出现不必要的括号。

如if(I=42)then中,括号就是不必要的。

一、程序风格:

1、严格采用阶梯层次组织程序代码:

各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行。

要求相匹配的大括号在同一列,对继行则要求再缩进4格。

2、提示信息字符串的位置

在程序中需要给出的提示字符串,为了支持多种语言的开发,除了一些给调试用的临时信息外,其他所有的提示信息必须定义在资源中。

3、对变量的定义,尽量位于函数的开始位置。

---------------------------------------------------------------------------------------

二、命名规则:

1、变量名的命名规则

①、变量的命名规则要求用“匈牙利法则”。

即开头字母用变量的类型,其余部分用变量的英文意思或其英文意思的缩写,尽量避免用中文的拼音,要求单词的第一个字母应大写。

即:

变量名=变量类型+变量的英文意思(或缩写)

对非通用的变量,在定义时加入注释说明,变量定义尽量可能放在函数的开始处。

见下表:

bool(BOOL)用b开头bIsParent

byte(BYTE)用by开头byFlag

short(int)用n开头nStepCount

long(LONG)用l开头lSum

char(CHAR)用c开头cCount

float(FLOAT)用f开头fAvg

double(DOUBLE)用d开头dDeta

void(VOID)用v开头vVariant

unsignedint(WORD)用w开头wCount

unsignedlong(DWORD)用dw开头dwBroad

HANDLE(HINSTANCE)用h开头hHandle

DWORD用dw开头dwWord

LPCSTR(LPCTSTR)用str开头strString

用0结尾的字符串用sz开头szFileName

对未给出的变量类型要求提出并给出命名建议给技术委员会。

②、指针变量命名的基本原则为:

对一重指针变量的基本原则为:

“p”+变量类型前缀+命名

如一个float*型应该表示为pfStat

对多重指针变量的基本规则为:

二重指针:

“pp”+变量类型前缀+命名

三重指针:

“ppp”+变量类型前缀+命名

......

③、全局变量用g_开头,如一个全局的长型变量定义为g_lFailCount,即:

变量名=g_+变量类型+变量的英文意思(或缩写)

④、静态变量用s_开头,如一个静态的指针变量定义为s_plPerv_Inst,即:

变量名=s_+变量类型+变量的英文意思(或缩写)

⑤、成员变量用m_开头,如一个长型成员变量定义为m_lCount;

即:

变量名=m_+变量类型+变量的英文意思(或缩写)

⑥、对枚举类型(enum)中的变量,要求用枚举变量或其缩写做前缀。

并且要求用大写。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2