-
Notifications
You must be signed in to change notification settings - Fork 25
/
ch09s03.html
3 lines (3 loc) · 5.78 KB
/
ch09s03.html
1
2
3
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>3. 标识符命名</title><link rel="stylesheet" href="styles.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /><link rel="start" href="index.html" title="Linux C编程一站式学习" /><link rel="up" href="ch09.html" title="第 9 章 编码风格" /><link rel="prev" href="ch09s02.html" title="2. 注释" /><link rel="next" href="ch09s04.html" title="4. 函数" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">3. 标识符命名</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch09s02.html">上一页</a> </td><th width="60%" align="center">第 9 章 编码风格</th><td width="20%" align="right"> <a accesskey="n" href="ch09s04.html">下一页</a></td></tr></table><hr /></div><div class="sect1" lang="zh-cn" xml:lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2737588"></a>3. 标识符命名</h2></div></div></div><p>标识符命名应遵循以下原则:</p><div class="orderedlist"><ol type="1"><li><p>标识符命名要清晰明了,可以使用完整的单词和易于理解的缩写。短的单词可以通过去元音形成缩写,较长的单词可以取单词的头几个字母形成缩写。看别人的代码看多了就可以总结出一些缩写惯例,例如<code class="literal">count</code>写成<code class="literal">cnt</code>,<code class="literal">block</code>写成<code class="literal">blk</code>,<code class="literal">length</code>写成<code class="literal">len</code>,<code class="literal">window</code>写成<code class="literal">win</code>,<code class="literal">message</code>写成<code class="literal">msg</code>,<code class="literal">number</code>写成<code class="literal">nr</code>,<code class="literal">temporary</code>可以写成<code class="literal">temp</code>,也可以进一步写成<code class="literal">tmp</code>,最有意思的是<code class="literal">internationalization</code>写成<code class="literal">i18n</code>,词根<code class="literal">trans</code>经常缩写成<code class="literal">x</code>,例如<code class="literal">transmit</code>写成<code class="literal">xmt</code>。我就不多举例了,请读者在看代码时自己注意总结和积累。</p></li><li><p>内核编码风格规定变量、函数和类型采用全小写加下划线的方式命名,常量(比如宏定义和枚举常量)采用全大写加下划线的方式命名,比如上一节举例的函数名<code class="literal">radix_tree_insert</code>、类型名<code class="literal">struct radix_tree_root</code>、常量名<code class="literal">RADIX_TREE_MAP_SHIFT</code>等。</p><p>微软发明了一种变量命名法叫匈牙利命名法(Hungarian notation)<a id="id2738656" class="indexterm"></a>,在变量名中用前缀表示类型,例如<code class="literal">iCnt</code>(i表示int)、<code class="literal">pMsg</code>(p表示pointer)、<code class="literal">lpszText</code>(lpsz表示long pointer to a zero-ended string)等。Linus在<a class="xref" href="bi01.html#bibli.codingstyle" title="Linux内核源代码目录下的Documentation/CodingStyle文件">[<abbr class="abbrev">CodingStyle</abbr>]</a>中毫不客气地讽刺了这种写法:“<span class="quote">Encoding the type of a function into the name (so-called Hungarian notation) is brain damaged - the compiler knows the types anyway and can check those, and it only confuses the programmer. No wonder MicroSoft makes buggy programs.</span>”代码风格本来就是一个很有争议的问题,如果你接受本章介绍的内核编码风格(也是本书所有范例代码的风格),就不要使用大小写混合的变量命名方式<sup>[<a id="id2738703" href="#ftn.id2738703" class="footnote">19</a>]</sup>,更不要使用匈牙利命名法。</p></li><li><p>全局变量和全局函数的命名一定要详细,不惜多用几个单词多写几个下划线,例如函数名<code class="literal">radix_tree_insert</code>,因为它们在整个项目的许多源文件中都会用到,必须让使用者明确这个变量或函数是干什么用的。局部变量和只在一个源文件中调用的内部函数的命名可以简略一些,但不能太短。尽量不要使用单个字母做变量名,只有一个例外:用<code class="literal">i</code>、<code class="literal">j</code>、<code class="literal">k</code>做循环变量是可以的。</p></li><li><p>针对中国程序员的一条特别规定:禁止用汉语拼音做标识符,可读性极差。</p></li></ol></div><div class="footnotes"><br /><hr width="100" align="left" /><div class="footnote"><p><sup>[<a id="ftn.id2738703" href="#id2738703" class="para">19</a>] </sup>大小写混合的命名方式是Modern C++风格所提倡的,在C++代码中很普遍,称为CamelCase<a id="id2738708" class="indexterm"></a>),大概是因为有高有低像驼峰一样。</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch09s02.html">上一页</a> </td><td width="20%" align="center"><a accesskey="u" href="ch09.html">上一级</a></td><td width="40%" align="right"> <a accesskey="n" href="ch09s04.html">下一页</a></td></tr><tr><td width="40%" align="left" valign="top">2. 注释 </td><td width="20%" align="center"><a accesskey="h" href="index.html">起始页</a></td><td width="40%" align="right" valign="top"> 4. 函数</td></tr></table></div></body></html>