`
talentluke
  • 浏览: 591875 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

C语言常见命名规范

 
阅读更多

1 常见命名规则

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

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

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

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

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

本章所述的命名规则主要基于下划线命名法发展而来。


2 函数的命名

函数名使用下划线分割小写字母的方式命名:

设备名_操作名()

操作名一般采用:谓语(此时设备名作为宾语或者标明操作所属的模块)或者
谓语+宾语/表语(此时设备名作为主语或者标明操作所属的模块) 等形式,如:

tic_init()
adc_is_busy()
uart_tx_char()

中断函数的命名直接使用 设备名_isr() 的形式命名,如:
timer2_isr()


3 变量的命名

变量的命名也采用下划线分割小写字母的方式命名。
命名应当准确,不引起歧义,且长度适中。如:
int length;
uint32 test_offset;

单字符的名字也是常用的,如i, j, k等,它们通常可用作函数内的局部变量。

tmp常用做临时变量名。

局部静态变量,应加s_词冠(表示static),如:
static int s_lastw;

全局变量(尤其是供外部访问的全局变量),应加g_词冠(表示global),如:
void (* g_capture_hook)(void);


4 常量及宏的命名

采用下划线分割大写字母的方式命名,一般应以设备名作为前缀,
防止模块间命名的重复。如:

#define TIMER0_MODE_RELOAD 2
#define TIMER2_COUNT_RETRIEVE(val) ((uint16)(65536 - (val)))

当然,看作接口的宏可以按照函数的命名方法命名,例如:

#define timer2_clear() (TF2 = 0)
#define timer0_is_expired() (TF0)


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语言系统化开发基础精讲

    16.函数基础【tips:Google命名规范】 17.函数的原型【空参数列表与 C++的区别】 18.变量的类型和作用域【Compiler Explorer查看汇编指令】 19.函数的变长参数【对比java的变长参数】 20.函数的递归【C语言实现...

    C开发编码规范(学习模板)

    1. **命名规范**: * 变量名和函数名应清晰、简洁,且能准确描述其用途。 * 常量应全部大写,单词间用下划线分隔。 * 结构体类型名应以“struct”关键字开头。 2. **注释规范**: * 对函数、变量、结构体等...

    STM32嵌入式系统开发实战指南 FreeRTOS与LwIP联合移植Part1[机械工业出版社]

    4.2 基于C语言的嵌入式编程规范 4.2.1 源代码的排版 4.2.2 源代码的注释 4.2.3 标识符命名 4.2.4 代码可读性 4.2.5 变量、结构 4.2.6 函数、过程 4.2.7 可测性 4.2.8 程序效率 4.2.9 质量保证 4.2.10 代码编辑、编译...

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    面试题7:函数、变量等命名都有哪些规则 面试题8:写出bool、int、float、指针变量与“零值”比较的if语句 3.3 数据类型 面试题9:写出代码的输出结果 面试题10:C语言中不合法的整型常数 面试题11:short i = 0; i ...

    现代C++程序设计

    1.1 什么是C语言和C++ 1.1.1 C和C++历史回顾 1.1.2 C/C++是一门编译语言 1.1.3 为什么许多程序员都选择C++ 1.2 什么是面向对象 1.2.1 C++程序并不一定是面向对象的 1.2.2 一个简单的面向对象程序示例 1.2.3 面向...

    【全新正版】现代C++程序设计(原书第2版)

    1.1 什么是C语言和C++ 1.1.1 C和C++历史回顾 1.1.2 C/C++是一门编译语言 1.1.3 为什么许多程序员都选择C++ 1.2 什么是面向对象 1.2.1 C++程序并不一定是面向对象的 1.2.2 一个简单的面向对象程序示例 1.2.3 面向对象...

    会计理论考试题

    31.启动Windows98中文版后,下列中___C___的图标不是常见的图标。 A、我的电脑 B、回收站 C、资源管理器 D、收件箱 32.多媒体电脑是指 __B___ 。 A、专供家庭娱乐用的电脑 B、能处理文字、图形、影像与声音等信息的...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS(Information Manage-mentSystem)是其典型代表。 2. 网状结构模型:按照网状数据结构建立的数据库系统称为网状数据库系统,其...

Global site tag (gtag.js) - Google Analytics