⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 item_000.htm

📁 C++程序编写规范,适合C++中级读者
💻 HTM
📖 第 1 页 / 共 2 页
字号:
Arial;mso-hansi-font-family:Arial'>不拘小节(或:了解什么不需要被规范化)。</span></h3>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>摘要</span></b></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>只说需要说的:不要强求个人的品味和过时的习惯。</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>讨论</span><a name=ch75index09></a><a name=ch75index08></a><a
name=ch75lev1sec2></a><span lang=EN-US><o:p></o:p></span></b></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>有一些问题仅仅是个人品味,而不会影响到程序的正确性和可读性,这些问题不属于编程规范的一部分。任何一个专业程序员都能轻易地阅读和编写代码,即使代码编排的格式和他的习惯有所不同。</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>在每一个源文件或者甚至是每一个项目中,尽量用一致的格式,因为在同一段代码中使用几种风格是很令人恼怒的事情。但是不要在多个项目或整个公司强求格式的一致性。</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>重要的不是制定一套规则,而是与你正在维护的文件已经使用的风格保持一致,下面是几个常见的问题:</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>不要规定缩进多少,但要尽量用缩进来体现代码的结构:你喜欢用多少个空格缩进都可以,但是至少在每个文件中要保持一致。</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>不要强制代码行的长度,但要尽量使代码易于阅读:你喜欢多长的代码行都可以,但是不要过分。研究表明不超过十个单词的文本宽度最利于眼睛浏览。</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>不要过分强制命名规则,但要尽量使用一致的命名约定:只有两件事必须要做:</span><span
lang=EN-US>a) </span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>绝对不要使用“秘密的名字”,也就是那些以一个下划线开头或包含两个下划线的名字;和</span><span
lang=EN-US>b) </span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>总是给宏起类似</span><span lang=EN-US>ONLY_UPPERCASE_NAMES</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>的名字,绝对不要考虑用常用的单词或缩写(包括常用的模板参数,如</span><span lang=EN-US>T</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>和</span><span lang=EN-US>U</span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>。像</span><span
lang=EN-US>#define T anything</span><span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>这样的代码会造成极端的混乱)给宏命名。除此之外,尽量用一致并且有意义的名字,并遵循文件或模块已有的约定。(如果你无法确定自己的命名约定,可以试试这个:命名类,函数和枚举</span><span
class=SpellE><span lang=EN-US>LikeThis</span></span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;命名变量</span><span
class=SpellE><span lang=EN-US>likeThis</span></span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;命名私有成员变量</span><span
class=SpellE><span lang=EN-US>likeThis</span></span><span lang=EN-US>_</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;命名宏</span><span lang=EN-US>LIKE_THIS</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>)。</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>不要规定注释的风格(除了有些地方工具会根据特定的风格来产生文档),但要尽量写一些有用的注释:尽可能写代码而不是写注释(例如:参见第</span><span
lang=EN-US>16</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>条)。写的注释不要重复代码,否则它们可能会不一致。尽量写一些说明性的注释来解释所使用的方法和原理。</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>最后,不要强求一些已经过时的规则(参见第</span><span
lang=EN-US>3</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>和第</span><span lang=EN-US>4</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>条),即使这些规则曾经出现在从前的一些编程规范中。</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><a name=ch74lev1sec3></a><b style='mso-bidi-font-weight:
normal'><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>示例</span></b></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><i style='mso-bidi-font-style:normal'><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>示例</span><span lang=EN-US>1</span></i><i style='mso-bidi-font-style:
normal'><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>:括号对齐。</span></i><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>以下几种并不存在可读性的区别:</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=GramE>void</span> <span class=SpellE>using_k_and_r_style</span>() {</span></p>

<p class=MsoNormal style='text-indent:36.0pt'><span lang=EN-US><span
style='mso-spacerun:yes'>&nbsp;</span><span
style='mso-spacerun:yes'>&nbsp;&nbsp; </span><i style='mso-bidi-font-style:
normal'>// …<o:p></o:p></i></span></p>

<p class=MsoNormal style='text-indent:36.0pt'><span lang=EN-US>}</span></p>

<p class=MsoNormal style='text-indent:36.0pt'><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='text-indent:36.0pt'><span class=GramE><span
lang=EN-US>void</span></span><span lang=EN-US> <span class=SpellE>putting_each_brace_on_its_own_line</span>()</span></p>

<p class=MsoNormal style='text-indent:36.0pt'><span lang=EN-US>{</span></p>

<p class=MsoNormal style='text-indent:36.0pt'><span lang=EN-US><span
style='mso-spacerun:yes'>&nbsp;</span><span
style='mso-spacerun:yes'>&nbsp;&nbsp; </span><i style='mso-bidi-font-style:
normal'>// …<o:p></o:p></i></span></p>

<p class=MsoNormal style='text-indent:36.0pt'><span lang=EN-US>}</span></p>

<p class=MsoNormal style='text-indent:36.0pt'><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='text-indent:36.0pt'><span class=GramE><span
lang=EN-US>void</span></span><span lang=EN-US> <span class=SpellE>or_putting_each_brace_on_its_own_line_indented</span>()</span></p>

<p class=MsoNormal style='text-indent:36.0pt'><span lang=EN-US><span
style='mso-spacerun:yes'>&nbsp;</span><span
style='mso-spacerun:yes'>&nbsp;&nbsp; </span>{</span></p>

<p class=MsoNormal style='text-indent:36.0pt'><span lang=EN-US><span
style='mso-spacerun:yes'>&nbsp;</span><span
style='mso-spacerun:yes'>&nbsp;&nbsp; </span><i style='mso-bidi-font-style:
normal'>// …<o:p></o:p></i></span></p>

<p class=MsoNormal style='text-indent:36.0pt'><span lang=EN-US><span
style='mso-spacerun:yes'>&nbsp;</span><span
style='mso-spacerun:yes'>&nbsp;&nbsp; </span>}</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>任何一个专业程序员都能轻易地阅读和编写这些风格的代码,不存在任何困难。但是要尽量保持一致:不要随便或者以一种会混淆作用域嵌套的方式放括号,并遵循每个文件中已有的风格。在本书中,为了使可读性最佳,我们在编辑允许的范围内选择括号对齐方式。</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><i style='mso-bidi-font-style:normal'><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>示例</span><span lang=EN-US>2</span></i><i style='mso-bidi-font-style:
normal'><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>:空格与制表符。</span></i><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>有些团队有正当的理由选择禁用制表符(</span><span lang=EN-US>Tab</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>)(例如</span><span lang=EN-US>[<span class=SpellE>BoostLRG</span>]</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>)</span><span lang=EN-US>,</span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>因为制表符在不同的编译器中的设定都不尽相同,如果使用不当,可能会使缩进变得一团糟。另一些同样知名的团队也有正当的理由允许使用制表符,并采取一些手段来避免制表符的缺点。保持一致就好:如果允许使用制表符,那么要确保团队成员在维护彼此的代码时不会牺牲代码的清晰性和可读性(参见第</span><span
lang=EN-US>6</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>条)。如果不允许使用制表符,那么应该允许编辑器在读入源文件时把空格转换为制表符,这样用户仍然可以在编辑器内使用制表符,但是此类用户要确保在保存文件时把制表符重新转换为空格。</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><i style='mso-bidi-font-style:normal'><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>示例</span><span lang=EN-US>3:</span></i><i style='mso-bidi-font-style:
normal'><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>匈牙利命名法。</span></i><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>把类型信息加入到变量名中对类型不安全的语言(特别是</span><span lang=EN-US>C</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>)来说是有用的,在面向对象的语言中是可行的但没有什么益处(只有害处),在泛型编程中是不可行的。因此,任何一个</span><span
lang=EN-US>C++</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>编程规范都不应该要求使用匈牙利命名法,尽管有些</span><span
lang=EN-US>C++</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>编程规范可能会有正当的理由禁用之。</span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><i style='mso-bidi-font-style:normal'><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>示例</span><span lang=EN-US>4</span></i><i style='mso-bidi-font-style:
normal'><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>:单入口,单出口(</span><span lang=EN-US>Single
entry, single exit, “SESE”</span></i><i style='mso-bidi-font-style:normal'><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>)</span></i><span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>。过去有一些编程规范要求每个函数具有唯一的出口,也就是说一个</span><span
lang=EN-US>return</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>语句。这样的要求在支持异常和析构函数的语言中已经过时了,因为一般来说函数具有许多隐式的出口。更好的做法是遵循像第</span><span
lang=EN-US>5</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>条之类的规范,此类规范提倡编写更简单,更短的函数,这些函数更容易理解,在发生错误时要保证安全性也比较容易。</span></p>

</div>

</body>

</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -