网站用户体验比较,国内产品设计公司前十名,苏州有哪些做网站,拓者设计最近开始在阅读陈正冲编著的《C 语言深度解剖》#xff0c;还没读到十分之一就感觉收获颇多。其中印象比较深刻的是其中的变量的命名规则。 里面提到的不允许使用拼音正是我有时候会犯的错。 因为在以往的工作中#xff0c;偶尔会遇到时间紧迫的情况。 而对于新增加的变量不知…最近开始在阅读陈正冲编著的《C 语言深度解剖》还没读到十分之一就感觉收获颇多。其中印象比较深刻的是其中的变量的命名规则。 里面提到的不允许使用拼音正是我有时候会犯的错。 因为在以往的工作中偶尔会遇到时间紧迫的情况。 而对于新增加的变量不知道该用什么英文单词命名为了赶时间就用拼音代替。殊不知这是一个很不好的习惯。
一般规则
**【规则 1-1】**命名应当直观且可以拼读可望文知意便于记忆和阅读。 标识符最好采用英文单词或其组合不允许使用拼音。程序中的英文单词一般不要太复杂用词应当准确。 这个很好理解比如要用int整型定义一个矩形框的长就用int width。
**【规则 1-2】**命名的长度应当符合“min-length max-information”原则。C 是一种简洁的语言, 命名也应该是简洁的。例如变量名 MaxVal 就比MaxValueUntilOverflow 好用。标识符的长度一般不要过长较长的单词可通过去掉“元音”形成缩写。另外英文词尽量不缩写特别是非常用专业名词如果有缩写在同一系统中对同一单词必须使用相同的表示法并且注明其意思。 “min-length max-information” 原则是指在信息传递的过程中文本长度应该尽可能短但是不能牺牲信息的准确性和完整性。这个原则体现了在信息传递中精简和有效的文本表达的重要性。 短文本可以更快地阅读和理解同时也可以在有限的空间内更好地传达信息。然而为了保证信息准确性和完整性有时需要使用较长的文本。因此在编写文本时应该将准确和完整的信息作为首要考虑因素并尽可能简洁明了地表达出来。 这个原则可以通过有效的排版、优化的语言和有意义的标题来实现。通过使用这种最小长度和最大信息的原则可以提高信息传递的效率和效果使文本更易读和理解。
**【规则 1-3】**当标识符由多个词组成时每个词的第一个字母大写其余全部小写。比如int CurrentVal这样的名字看起来比较清晰远比一长串字符好得多。 这个规则其实各大语言本身系统语句都在遵循比如Qt的setWindowFlagsGetSystemMetrics在命名变量名的时候即便是再忙也要花时间去规范命名。如果为了方便短时间还好时间一长代码量一大或者将源代码给同事看的时候估计都是一头雾水。
**【规则 1-4】**尽量避免名字中出现数字编号如 Value1,Value2 等除非逻辑上的确需要编号。比如驱动开发时为管脚命名非编号名字反而不好。初学者总是喜欢用带编号的变量名或函数名这样子看上去很简单方便但其实是一颗颗定时炸弹。这个习惯初学者一定要改过来。 对于这个规则在才开始工作做的第一个软件时就犯过错在使用Qt的时候在UI界面新增控件时编辑器会根据当前UI上的情况自己给控件创建名称。比如拉3个按钮控件若UI界面上已经有两个被默认命名的按钮控件名pushButtonpushButton_2那么这3个控件将会被命名为pushButton_3,pushButton_4,pushButton_5。虽然在UI界面新拉控件的时候很爽咔咔咔半天时间就能做好一个界面。但真正开始对每个控件写事件写槽函数的时候就会反复的回到UI界面看这个按钮当时是setText的什么名字。这个习惯在第二个软件时有所改变。但是基于软件的性质还是难免会出现数字编号。比如第二个软件所涉及到的下位机有40个通道每个通道需要对应一组控件在对这一组控件命名时就得加上通道号。
【规则 1-5】对在多个文件之间共同使用的全局变量或函数要加范围限定符(建议使用模块名 (缩写)作为范围限定符)。(GUI_ etc) 这个用到的比较少是因为在工作中本人不是很喜欢定义全局变量。一般喜欢通过定义一个类专门来储存需要全局使用的变量。然后在这个类的public中定义在需要引用全局变量的头文件中include这个类就行。我现在还不确定这种方式的优劣等到我开始系统性学习C的时候会重点关注这些知识点。
标识符的命名规则
**【规则 1-6】**标识符名分为两部分规范标识符前缀(后缀) 含义标识 。非全局变量可以 不用使用范围限定符前缀。
**【规则 1-7】**作用域前缀命名规则。
No.标识符类型作用域前缀1Global Variableg2File Static Variable(native)n3Function Static Variablef4Auto Variablea5Global Functiong6Static Functionn
**【规则 1-8】**数据类型前缀命名规则。
No.PrefixSuffixData TypeExampleRemark1btbitBit btVariable;2bbooleanboolean bVariable;3ccharchar cVariable;4iintint iVariable;5sshort[int]short[int] sVariable;6llong[int]long[int] lVariable;7uunsigned[int]unsigned[int] uiVariable;8ddoubledouble dVariable;9ffloatfloat fVariable;10ppointervoid *vpVariable;指针前缀11vvoidvoid vVariable;13stenumenum A stVariable;14ststructstruct A stVariable;15stunionunion A stVariable;16fpfunction pointvoid(* fpGetModeFuncList_a[])( void )17_aarray ofchar cVariable_a[TABLE_MAX];18_st_psttypedefenum/struct/uniontypedef struct SM_EventOpt { unsigned char unsigned int char}SM_EventOpt_st,*SM_EventOpt_pst;当自定义结构数据类型时使用_st 后缀当自定义结构数据类型为指针类型时使用_pst后缀
**【规则 1-9】**含义标识命名规则变量命名使用名词性词组函数命名使用动词性词组。
No变量名目标词动词(的过去分词)状语目的地含义1DataGotFromSDDataGotFromSD从 SD 中取得的数据2DataDeletedFromSDDataDeletedFromSD从 SD 中删除的数据
变量含义标识符构成目标词 动词(的过去分词) [状语][目的地]
No变量名目标词动词(的过去分词)状语目的地含义1GetDataFromSDDataGetFromSD从 SD 中取得的数据2DeleteDataFromSDDataDeleteFromSD从 SD 中删除的数据
函数含义标识符构成动词(一般现时)目标词[状语][目的地];
**【规则 1-10】**程序中不得出现仅靠大小写区分的相似的标识符。 例如int x, X; 变量 x 与 X 容易混淆 void foo(int x); 函数 foo 与 FOO 容易混淆 void FOO(float x); 这里还有一个要特别注意的就是 1数字 1和 l小写字母 l之间0数字 0和 o 小写字母 o之间的区别。这两对真是很难区分的我曾经的一个同事就被这个问题折腾 了一次。
**【规则 1-11】**一个函数名禁止被用于其它之处。
//例如
#include c_standards.h
void foo(int p_1)
{int x p_1;
}
void static_p(void)
{int foo 1u;
}**【规则 1-12】**所有宏定义、枚举常数、只读变量全用大写字母命名用下划线分割单词。
例如 const int MAX_LENGTH 100; //这不是常量而是一个只读变量具体请往后看 #define FILE_PATH “/usr/tmp”
**【规则 1-13】**考虑到习惯性问题局部变量中可采用通用的命名方式仅限于 n、i、j 等作 为循环变量使用。 一定不要写出如下这样的代码
int p;
char i;
int c;
char * a;一般来说习惯上用 n,m,i,j,k 等表示 int 类型的变量cch 等表示字符类型变量a 等表 示数组p 等表示指针。当然这仅仅是一般习惯除了 i,j,k 等可以用来表示循环变量外别 的字符变量名尽量不要使用。
**【规则 1-14】**定义变量的同时千万千万别忘了初始化。定义变量时编译器并不一定清空了 这块内存它的值可能是无效的数据。
**【规则 1-15】**不同类型数据之间的运算要注意精度扩展问题一般低精度数据将向高精度 数据扩展。