c语言变量命名规范更新_单片机_较多较乱

更新时间:2023-09-04 03:52:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

c语言变量命名规范更新_单片机_较多较乱


1 常见命名规则-----------------------------------------------------------------------
比较著名的命名规则首推匈牙利命名法,
这种命名方法是由Microsoft程序员查尔斯·西蒙尼(Charles Simonyi) 提出的。
其主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。
匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;
前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。
例如:lpszStr, 表示指向一个以'\0'结尾的字符串(sz)的长指针(lp)变量。

骆驼(Camel)命名法近年来越来越流行,
在许多新的函数库和Java这样的平台下使用得当相多。
骆驼命名法,正如它的名称所表示的那样,指的是混合使用大小写字母来构成标识符的名字。
其中第一个单词首字母小写,余下的单词首字母大写。
例如:printEmployeePaychecks(),函数名中每一个逻辑断点都有一个大写字母来标记。

帕斯卡(Pascal)命名法与骆驼命名法类似。
只不过骆驼命名法是第一个单词首字母小写,而帕斯卡命名法则是第一个单词首字母大写。
例如:DisplayInfo()和UserName都是采用了帕斯卡命名法。

在C#中,以帕斯卡命名法和骆驼命名法居多。
事实上,很多程序设计者在实际命名时会将骆驼命名法和帕斯卡结合使用,
例如变量名采用骆驼命名法,而函数采用帕斯卡命名法。

另一种流行的命名规则称为下划线命名法。
下划线法是随着C语言的出现流行起来的,在UNIX/LIUNX这样的环境,以及GNU代码中使用非常普遍。

-------------------------------------------------------------------------------------
编写高质量的代码
编写高质量的代码不仅可以提高程序执行效率,缩减代码长度,而且对于保证程序的可
靠性也是相当重要的。事实证明,低效冗长的代码更容易出现错误。一段高质量代码需要很
多方面的综合配合,如明晰的项目需求、简洁合理的程序结构、出色的文档、高效的语句表
达等,这是一个复杂的工程。这里只讨论如何编写出高效的表达语句。后面编程实例中会介
绍如何安排好程序结构。对此类问题感兴趣的读者可以阅读软件工程方面的相关书籍。
微处理器一般用于特定环境和特定用途,出于成本、功耗和体积方面的考虑,
一般都要
求尽量节省使用资源。并且,由于微处理器的硬件一般都不支持有符号数、浮点数的运算,
且运算位数有限,因此,分配变量时必须仔细。另外要说明的是,速度和存储器的消耗经常
是两个不可兼顾的目标,多数情况下,编程者必须根据实际情况作出权衡和取舍。
需要注意的事项如下:
(1)通

c语言变量命名规范更新_单片机_较多较乱

常在满足运算需求的前提下,尽量选择为变量定义字节数少的数据类型。
(2)尽量不用过长的数据类型,如long long 和double。
(3)MSP430 不支持位寻址,所以运算中尽量减少位操作。

两种取值的变量,如果RAM 容量允许,则可分配为unsigned char 类型,这样可以提高
运算速度。如果分配成某一字节中的某一位,则可以减少存储器的消耗,但会降低运算
速度。
(4)避免使用浮点数,尽量使用定点数进行小数运算。如果必须使用浮点数,则尽量使
用32 位的float,而不是64 位的double。
(5)尽量将变量分配为无符号数据类型。
(6)对于指针变量,如果声明后其值不再改变,则声明成const 类型,这样编译器编译
时能够更好地优化所生成的代码。
(7)尽可能使用局部变量而不是全局变量或者静态变量(static)。这样有利于编译器编
译时更好地优化所生成的代码。
(8)避免对局部变量使用&取地址符。因为这样会使编译器无法把此变量放在CPU 的寄
存器中,而是放在RAM 中,从而失去了优化的机会。
(9)仅在模块内使用的变量声明为staic 类型,这样有利于编译器优化。
(10)如果堆栈空间有限,则尽量减少函数调用的层次和递归调用。
(11)如果传送参数过多,则可以将参数组成一个数组或者结构,然后用指针传递。
(12)某些变量在中断程序和普通级别程序中都会被用到,所以必须加以保护。将变量
声明为volatile 类型,编译器优化时就不会移动它,对它的访问也就不会被延迟。应该保证对
volatile 的变量的访问不被打断,为此,可以在访问它的部分加上__monitor 声明。

头文件中的内容应该按照固定的顺序编写。首先使用#include 包含语句编写本头文件中.

-------------------------------------------------------------------------------------
变量的命名应该基本能够反映变量的数据类型和含义。一个变量由如下几部分组成:存
储类型+数据类型+变量名。命名规则如下:
存储类型
全局变量:大小写混用,不同部分之间用大写字母隔开。
局部变量:全部用小写,不同部分之间用“_”隔开。
数据类型 全部用小写字母。
char (无)
int i
float f
double d
struct s
指针 p
数组 a
有符号 g
变量名 使用缩写或者拼音都可以,大小写按照存储类型的规定进行。

举例:
unsigned char MoonRiver; //全局无符号字符变量
unsigned char moon_river; //局部无符号字符变量
char gMoonRiver; //全局有符号字符变量
char g_moon_river; //全局有符号字符变量
unsigned int iMoonRiver; //全局无符号整数变量
unsigned int* piMoonRiver; //全局指向无符号整数类型的指针变量
unsigned int p_moon_river;

c语言变量命名规范更新_单片机_较多较乱

//局部指向无符号整数类型的指针变量
有几种最常用到的变量,这里给出特别定义:
q0、q1、q2... 定义为unsigned char 类型,为在函数内部声明的局部变量。
iq0、iq1、iq2... 定义为unsigned int 类型,为在函数内部声明的局部变量。
fq0、fq1、fq2... 定义为float 类型,为在函数内部声明的局部变量。
n0、n1、n2... 定义为unsigned char 或者unsigned int 类型,在函数内部作为循环
次数的计数器使用。

---------------------------------------------------------------------------------------
3.缩略语
由于有几种词义在编程时经常会遇到,所以有必要为它们固定定义一个缩写,这样在遇
到这些缩写的时候就能够很快知道它们所表示的内容,这些缩写称为缩略语。缩略语在定义
变量和函数名的时候都可以使用。

(1)N 下标变量。如要向一个数组中按顺序填充数据,则需要一个变量保存数组的
下标。如果数组定义为unsigned int aiMoon[5],那么可以定义保存下标的变量为unsigned
char NMoon,这样就很容易知道这个变量是数组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 容易混淆

  void foo(int x);  // 函数foo 与FOO容易混淆

  void FOO(float x);

    【规则1-5】程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发

c语言变量命名规范更新_单片机_较多较乱

生语法错误,但会使人误解。

    【规则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;      // 类名 class LeafNode;      // 类名 void  Draw(void);   // 函数名 void SetValue(int value); //  函数名
【规则2-2】变量和参数用小写字母开头的单词组合而成。

    例如:

  BOOflag; int  drawMode;

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

    例如:

  const int MAX =  100;     const int MAX_LENGTH =  100;

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

    例如:

  void Init(…)      {      static  int s_initValue; // 静态变量      …     }

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

    例如:

    int g_howManyPeople;    // 全局变量

  int g_howMuchMoney;    // 全局变量

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


    例如:

  void  Object::SetValue(int width, int height)

  {

  m_width = width;

  m_height = height;

  }

    【规则2-7】为了防止某

c语言变量命名规范更新_单片机_较多较乱

一软件库中的一些标识符和其它软件库中的冲突,可以为各种标识符加上能反映软件性质的前缀。例如三维图形标准OpenGL的所有库函数均以gl开头,所有常量(或宏定义)均以GL开头。


---------------------------------------------------------------------------------------
缩进格式

  Tab是8个字符,于是缩进也是8个字符.有很多怪异的风格,他们将缩进格式定义为4个字符(设置为2个字符!)的深度,这就象试图将PI定义为3一样让人难以接受.
  理由是:缩进的大小是为了清楚的定义一个块的开始和结束.特别是当你已经在计算机前面呆了20多个小时了以后,你会发现一个大的缩进格式使得你对程序的理解更容易.

  现在,有一些人说,使用8个字符的缩进使得代码离右边很近,在80个字符宽度的终端屏幕上看程序很难受.回答是,但你的程序有3个以上的缩进的时候,你就应该修改你的程序.
  
总之,8个字符的缩进使得程序易读,还有一个附加的好处,就是它能在你将程序变得嵌套层数太多的时候给你警告.这个时候,你应该修改你的程序.

---------------------------------------------------------------------------------------
大符号的位置

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

  if (x is true) { we do y }
  
  然而,还有一种特殊的情况:命名函数:开始的括号是放在下一行的第一位,如下:
int function(int x) { body of function }
  
  所有非正统的人会非难这种不一致性,但是,所有思维正常的人明白: (第一) K&R是___对___的,(第二)如果K&R不对,请参见第一条. (:-))......另外,函数也是特殊的,不一定非得一致.

  需要注意的是结束的括号在它所占的那一行是空的,__除了__它跟随着同一条语句的继续符号.如"while"在do-while循环中,或者"else"在if语句中.如下:

  do { body of do-loop } while (condition);
  以及
  if (x == y) { .. } else if (x > y) { ... } else { .... }

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

--------------------------------------------------
-------------------------------------
命名系统

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

c语言变量命名规范更新_单片机_较多较乱

个C语言的程序员会将之命名为"tmp",这很容易书写,且并不是那么难以去理解.

  然而,当混合类型的名字不得不出现的时候,描述性名字对全局变量来说是必要的了.调用一个名为"foo"全局的函数是很让人恼火的.全局变量(只有你必须使用的时候才使用它) ,就象全局函数一样,需要描述性的命名方式.假如你有一个函数用来计算活动用户的数量,你应该这样命名--"count_active_users()"--或另外的相近的形式,你不应命名为"cntusr()".

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

  局部变量的命名应该短小精悍.假如你有一个随机的整数循环计数器,它有可能有"i",如果没有任何可能使得它能被误解的话,将其写作"loop_counter"是效率低下的.同样的,""tmp"可以是任何临时数值的函数变量.

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

---------------------------------------------------------------------------------------
函数

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

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

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

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

---------------------------------------------------------------------------------------
注释

  注释是一件很好的事情,但是过多的注释也是危险的,不
要试图区解释你的代码是注释如何如何的好:你应该将代码写得更好,而不是花费大量的时间去解释那些糟糕的代码.

  通常情况下,你的注释是说明你的代码做些什么,而不是怎么做的.而且,要试图避免将注释插在一个函数体里:假如这个函数确实很复杂,你需要在其中有部分的注释,你应该回到第四章看看

c语言变量命名规范更新_单片机_较多较乱

.你可以写些简短的注释来注明或警告那些你认为特别聪明(或极其丑陋)的部分,但是你必须要避免过多.取而代之的是,将注释写在函数前,告诉别人它做些什么事情,和可能为什么要这样做.

--------------------------------------------------------------------------------------
语法杂项:
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
unsigned int(WORD) 用w开头 wCount
unsigned long(DWORD) 用dw开头 dwBroad
HANDLE(HINSTANCE) 用h开头 hHandle
DWORD 用dw开头 dwWord
LPCSTR(LPCTSTR) 用str开头 strString
用0结尾的字符串 用sz开头 szFileName

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

②、指针变量命名的基本原则为:
对一重指针变量的基本原则为:
“p”+变量类型前缀+命名
如一个float*型应该表示为pfStat
对多重指针变量的基本规则为:
二重指针: “pp”+变量类型前缀+命

c语言变量命名规范更新_单片机_较多较乱


三重指针: “ppp”+变量类型前缀+命名
......
③、全局变量用g_开头,如一个全局的长型变量定义为g_lFailCount,即:变量名=g_+变量类型+变量的英文意思(或缩写)
④、静态变量用s_开头,如一个静态的指针变量定义为s_plPerv_Inst,即: 变量名=s_+变量类型+变量的英文意思(或缩写)
⑤、成员变量用m_开头,如一个长型成员变量定义为m_lCount;即:变量名=m_+变量类型+变量的英文意思(或缩写)
⑥、对枚举类型(enum)中的变量,要求用枚举变量或其缩写做前缀。并且要求用大写。
如:enum cmEMDAYS
{
EMDAYS_MONDAY;
EMDAYS_TUESDAY;
……
};
⑦、对struct、union、class变量的命名要求定义的类型用大写。并要加上前缀,其内部变量的命名规则与变量命名规则一致。
结构一般用S开头
如:struct ScmNPoint
{
int nX;//点的X位置
int nY; //点的Y位置
};
联合体一般用U开头
如: union UcmLPoint
{
long lX;
long lY;
}
类一般用C开头
如:
class CcmFPoint
{
public:
float fPoint;
};
对一般的结构应该定义为类模板,为以后的扩展性考虑
如:
template
class CcmTVector3d
{
public:
TYPE x,y,z;
};
⑧、对常量(包括错误的编码)命名,要求常量名用大写,常量名用英文表达其意思。
如:#define CM_FILE_NOT_FOUND CMMAKEHR(0X20B) 其中CM表示类别。
⑨、对const 的变量要求在变量的命名规则前加入c_,即:c_+变量命名规则;例如:
const char* c_szFileName;

--------------------------------------------------------------------------------------
2、 函数的命名规范:
函数的命名应该尽量用英文表达出函数完成的功能。遵循动宾结构的命名法则,函数名中动词在前,并在命名前加入函数的前缀,函数名的长度不得少于8个字母。
例如:
long cmGetDeviceCount(……);
3、函数参数规范:
①、 参数名称的命名参照变量命名规范。
②、 为了提高程序的运行效率,减少参数占用的堆栈,传递大结构的参数,一律采用指针或引用方式传递。
③、 为了便于其他程序员识别某个指针参数是
入口参数还是出口参数,同时便于编译器检查错误,应该在入口参数前加入const标志。如:
……cmCopyString(const char * c_szSource, char * szDest)
4、引出函数规范:
对于

c语言变量命名规范更新_单片机_较多较乱

从动态库引出作为二次开发函数公开的函数,为了能与其他函数以及Windows的函数区分,采用类别前缀+基本命名规则的方法命名。例如:在对动态库中引出的一个图象编辑的函数定义为 imgFunctionname(其中img为image缩写)。
现给出三种库的命名前缀:
①、 对通用函数库,采用cm为前缀。
②、 对三维函数库,采用vr为前缀。
③、 对图象函数库,采用img为前缀。
对宏定义,结果代码用同样的前缀。
5、文件名(包括动态库、组件、控件、工程文件等)的命名规范:
文件名的命名要求表达出文件的内容,要求文件名的长度不得少于5个字母,严禁使用象file1,myfile之类的文件名。

--------------------------------------------------------------------------------------
三、注释规范:
1、函数头的注释
对于函数,应该从“功能”,“参数”,“返回值”、“主要思路”、“调用方法”、“日期”六个方面用如下格式注释:
//程序说明开始
//================================================================//
// 功能: 从一个String 中删除另一个String。
// 参数: strByDelete,strToDelete
// (入口) strByDelete: 被删除的字符串(原来的字符串)
// (出口) strToDelete: 要从上个字符串中删除的字符串。
// 返回: 找到并删除返回1,否则返回0。(对返回值有错误编码的要// 求列出错误编码)。
// 主要思路:本算法主要采用循环比较的方法来从strByDelete中找到
// 与strToDelete相匹配的字符串,对多匹配strByDelete
// 中有多个strToDelete子串)的情况没有处理。请参阅:
// 书名......
// 调用方法:......
// 日期:起始日期,如:2000/8/21.9:40--2000/8/23.21:45
//================================================================//
函数名(……)

-------------------------------------------------------------------------------------
//程序说明结束
①、 对于某些函数,其部分参数为传入值,而部分参数为传出值,所以对参数要详细说明该参数是入口参数,还是出口参数,对于某些意义不明确的参数还要做详细说明(例如:以角度作为参数时
,要说明该角度参数是以弧度(PI),还是以度为单位),对既是入口又是出口的变量应该在入口和出口处同时标明。等等。
②、 函数的注释应该放置在函数的头文件中,在实现文件中的该函数的实现部分应该同时放置该注释。
③、 在注释中应该详细说明函数的主要实现思路、特

c语言变量命名规范更新_单片机_较多较乱

别要注明自己的一些想法,如果有必要则应该写明对想法产生的来由。对一些模仿的函数应该注释上函数的出处。
④、 在注释中详细注明函数的适当调用方法,对于返回值的处理方法等。在注释中要强调调用时的危险方面,可能出错的地方。
⑤、 对日期的注释要求记录从开始写函数到结束函数的测试之间的日期。
⑥、 对函数注释开始到函数命名之间应该有一组用来标识的特殊字符串。
如果算法比较复杂,或算法中的变量定义与位置有关,则要求对变量的定义进行图解。对难以理解的算法能图解尽量图解。

------------------------------------------------------------------------------------
2、变量的注释:
对于变量的注释紧跟在变量的后面说明变量的作用。原则上对于每个变量应该注释,但对于意义非常明显的变量,如:i,j等循环变量可以不注释。
例如: long lLineCount //线的根数。

--------------------------------------------------------------------------------------
 3、文件的注释:
文件应该在文件开头加入以下注释:
/////////////////////////////////////////////////////////////////////
// 工程: 文件所在的项目名。
// 作者:**,修改者:**
// 描述:说明文件的功能。
// 主要函数:…………
// 版本: 说明文件的版本,完成日期。
// 修改: 说明对文件的修改内容、修改原因以及修改日期。
// 参考文献: ......
/////////////////////////////////////////////////////////////////////
为了头文件被重复包含要求对头文件进行定义如下:
#ifndef __FILENAME_H__
#define __FILENAME_H__
其中FILENAME为头文件的名字。

------------------------------------------------------------------------------------
   4、其他注释:
在函数内我们不需要注释每一行语句。但必须在各功能模块的每一主要部分之前添加块注释,注释每一组语句,在循环、流程的各分支等,尽可能多加以注释。
其中的循环、条件、选择等位置必须注释。
对于前后顺序不能颠倒的情况,建议在注释中增加序号。
例如:
在其他顺序执行的程序中,每隔3—5行语句,必须加一个注释,注明这一段语句所组成的小模块的作用。对于自己的一些比较独特的思想要求在注释中标明。


--------------------------------------------------------------------------------------
四、程序健壮性:
1、函数的返回值规范:
对于函数的返回位置,尽量保持单一性,即一个

c语言变量命名规范更新_单片机_较多较乱

函数尽量做到只有一个返回位置。(单入口单出口)。
要求大家统一函数的返回值,所有的函数的返回值都将以编码的方式返回。
例如编码定义如下:
#define CM_POINT_IS_NULL CMMAKEHR(0X200)
:
:
建议函数实现如下:
long 函数名(参数,……)
{
long lResult; //保持错误号
lResult=CM_OK;
//如果参数有错误则返回错误号
if(参数==NULL)
{
lResult=CM_POINT_IS_NULL;
goto END;
}
……
END:
return lResult;
}
2、关于goto的应用:
对goto语句的应用,我们要求尽量少用goto语句。对一定要用的地方要求只能向后转移。
3、资源变量的处理(资源变量是指消耗系统资源的变量):
对资源变量一定赋初值。分配的资源在用完后必须马上释放,并重新赋值。
4、对复杂的条件判断,为了程序的可读性,应该尽量使用括号。
例:if(((szFileName!=NULL)&&(lCount>=0)))||(bIsReaded==TRUE))

---------------------------------------------------------------------------------------
五、可移植性:
1、高质量的代码要求能够跨平台,所以我们的代码应该考虑到对不同的平台的支持,特别是对windows98和windowsnt的支持。
2、由于C语言的移植性比较好,所以对算法函数要求用C代码,不能用C++代码。
3、对不同的硬件与软件的函数要做不同的处理

---------------------------------------------------------------------------------------
5 常用缩写词

原词 缩写

addition add
answer ans
array arr
average avg
buffer buf或buff
capture cap或capt
check chk
count cnt
column col
control ctrl
decode dec
define def
delete del
destination dst或dest
display disp
division div
encode enc
environment env
error err
float flt
frequency freq
header hdr
index idx
image img
increment inc
initalize init
iteration itr
length len
memory mem
middle mid
make mk
message msg
multiplication mul
number num
operand opnd
optimization opt
operator optr
packet pkt
positon pos
previous pre或prev
payload type pt
pointer ptr
return code rc
record rcd
receive recv
result res
return ret
source src
stack stk
string str
subtraction sub
table tab
temporary tmp或temp
total tot
time stamp ts
value val

-----------------------------------------------------------------
----------------------
6 结语

没有一种命名规则可以让所有的程序员赞同。而这多种命名规则也确实各有利弊。

没有必要花太多的精力试图发明最好的命名规则,
而是应当制定一种令大多数项目成员满意的命名规则并切实执行。
标识符命名的一致性自然会体现出代码

c语言变量命名规范更新_单片机_较多较乱

的优雅。

当然,如果你的程序使用了第三方的代码,而这些模块经验证确实是正确无误的。
那么也没有必要一味追求命名的一致性,而去修改这些已经定型的模块中的函数和变量名。

---------------------------------------------------------------------------------------
查看文章
c语言命名规范2009-09-07 17:31比较著名的命名规则当推Microsoft公司的“匈牙利”法,该命名规则的主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。例如所有的字符变量均以ch为前缀,若是指针变量则追加前缀p。如果一个变量由ppch开头,则表明它是指向字符指针的指针。

“匈牙利”法最大的缺点是烦琐,例如

int i, j, k;

float x, y, z;

倘若采用“匈牙利”命名规则,则应当写成

int iI, iJ, ik; // 前缀 i表示int类型

float fX, fY, fZ; // 前缀 f表示float类型

如此烦琐的程序会让绝大多数程序员无法忍受。

据考察,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。命名规则对软件产品而言并不是“成败悠关”的事,我们不要化太多精力试图发明世界上最好的命名规则,而应当制定一种令大多数项目成员满意的命名规则,并在项目中贯彻实施。

-------------------------------------------------------------------------------------
3.1 共性规则
本节论述的共性规则是被大多数程序员采纳的,我们应当在遵循这些共性规则的前提下,再扩充特定的规则,如3.2节。


l 【规则3-1-1】标识符应当直观且可以拼读,可望文知意,不必进行“解码”。

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


l 【规则3-1-2】标识符的长度应当符合“min-length && max-information”原则。

几十年前老ANSI C规定名字不准超过6个字符,现今的C++/C不再有此限制。一般来说,长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符不足为怪。那么名字是否越长约好?不见得! 例如变量名maxval就比maxValueUntilOverflow好用。单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z等,它们通常可用作函数内的局部变量。


l 【规则3-1-3】命名规则尽量与所采用的操作系统或开发工具的风格保持一致


例如Windows应用程序的标识符通常采用“大小写”混排的方式,如AddChild。而Unix应用程序的标识符通常采用“小写加下划线”的方式,如add_child。别把这两类风格混在一起用。


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


c语言变量命名规范更新_单片机_较多较乱

如:

int x, X; // 变量x 与 X 容易混淆

void foo(int x); // 函数foo 与FOO容易混淆

void FOO(float x);


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


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

例如:

float value;

float oldValue;

float newValue;


l 【规则3-1-7】全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身。

例如:

DrawBox(); // 全局函数

box->Draw(); // 类的成员函数


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

例如:

int minValue;

int maxValue;


int SetValue(…);

int GetValue(…);


2 【建议3-1-1】尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。

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


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

例如:

class Node; // 类名

class LeafNode; // 类名

void Draw(void); // 函数名

void SetValue(int value); // 函数名


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

例如:

BOOL flag;

int drawMode;


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

例如:

const int MAX = 100;

const int MAX_LENGTH = 100;


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

例如:

void Init(…)

{

static int s_initValue; // 静态变量



}


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

例如:

int g_howManyPeople; // 全局变量

int g_howMuchMoney; // 全局变量


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

例如:

void Object::SetValue(int width, int height)

{

m_width = width;

m_height = height;

}


l 【规则3-2-7】为了防止某一软件库中的一些标识符和其它软件库中的冲突,可以为各种标识符加上能反映软件性质的前缀。例如三维图形标准OpenGL的所有库函数均以gl开头,所有常量(或宏定义)
均以GL开头。


c#命名规则和开发习惯


一、命名



1.用pascal规则来命名方法和类型.

public class TextBox

{

public void DataBind()

{

}

}


c语言变量命名规范更新_单片机_较多较乱



2.用camel规则来命名局部变量和方法的参数.

string userName;

public AddUser(string userId, byte[] password);



3.所有的成员变量前加前缀 m_

public class Database

{

public string m_connectionString;

}



4.接口的名称加前缀 I.

interface ICompare

{

int compare();

}



5.自定义的属性以Attribute结尾

public class AuthorAttribute : Attribute

{

}



6.自定义的异常以Exception结尾

public class AppException : Exception

{

}



7.方法的命名.一般将其命名为动宾短语.

ShowDialog()

CreateFile()

GetPath()



8.代码的缩进.要用Tab,而不要用space.



9.局部变量的名称要有意义.不要用x,y,z等等.

string userName



10.所有的成员变量声明在类的顶端,用一个换行把它和方法分开.



11.用有意义的名字命名namespace,如:产品名、公司名.



12.建议局部变量在最接近使用它时再声明.



13.使用某个控件的值时,尽量命名局部变量.



14.把引用的系统的namespace和自定义或第三方的分开.



15.文件名要能反应类的内容,最好是和类同名,一个文件中一个类.



16.目录结构中要反应出namespace的层次.



17.大括号"{"要新起一行.

public class AuthorAttribute : Attribute

{

}


--------------------------------------------------------------------------------------
二、编码习惯.

1.用C#预定义的类名,而不要用别名.

string userName; 而不是 System.String userName;

int number; 而不是 System.Int32;



2.一行不要超过80个字符.



3.尽量不要手工更改机器生成的代码,若必须更改,一定要改成和机器生成的代码风格一样.



4.关键的语句(包括声明关键的变量)必须要写注释.



5.文字常量和数字常量不要硬编码,应该用常量类或枚举代替.



6.不要用goto系列语句.



7.不要声明public和protected的成员变量,应用property.



8.不要声明public的event,应用事件访问器.

public class Source

{

private EventHandler m_NumberChangeEvent;



public event EventHandler NumberChangeEvent

{

add

{

m_NumberChangeEvent += value;

}



remove

{

m_NumberChangeEvent -= value;

}

}

}



9.类型转换的使用规则.

Animal animal = new Dog();

Dog dog = animal as Dog;

if (dog != null)

{

}



10.生成和构建一个长的字符串时,一定要使用StringBuilder,而不用string.



11.始终使用"
;{ }"包含if下的语句,即使只有一条语句.



12.switch语句一定要有default来处理意外情况.



13.尽量不要使用三目运算符 ? : ,而要使用if语句.



14.尽量不用使用this引用,除非是要调用类中的另一个Co

c语言变量命名规范更新_单片机_较多较乱

nstructor.

public class Person

{

public Person(string name)

{

}



public Person() : this("Jim")

{

}

}

本文来源:https://www.bwwdw.com/article/31gi.html

Top