📄 高质量c -c编程指南.doc
字号:
<P ALIGN="JUSTIFY">在</FONT><FONT SIZE=3>C++ </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小。</P>
<UL>
<B><P ALIGN="JUSTIFY"><LI>【建议</FONT><FONT SIZE=3>1-2-2</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>】</B>不提倡使用全局变量,尽量不要在头文件中出现象</FONT><FONT SIZE=3>extern int value </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>这类声明。</LI></P></UL>
<P ALIGN="JUSTIFY"></P></FONT>
<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=567>
<TR><TD VALIGN="TOP"><DIR>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">// 版权和版本声明见示例</FONT><FONT SIZE=3>1-1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,此处省略。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">#ifndef	GRAPHICS_H	</FONT><FONT SIZE=3>// </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>防止</FONT><FONT SIZE=3>graphics.h</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>被重复引用</P>
<P ALIGN="JUSTIFY">#define	GRAPHICS_H</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">#include <math.h>		</FONT><FONT SIZE=3>// </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>引用标准库的头文件</P>
<P ALIGN="JUSTIFY">…</P>
<P ALIGN="JUSTIFY">#include </FONT><FONT SIZE=3>“myheader.h” </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>	</FONT><FONT SIZE=3>// </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>引用非标准库的头文件</P>
<P ALIGN="JUSTIFY">…</P>
<P ALIGN="JUSTIFY">void Function1(…);	// 全局函数声明</P>
<P ALIGN="JUSTIFY">…</P>
<P ALIGN="JUSTIFY">class Box			 // 类结构声明</P>
<P ALIGN="JUSTIFY">{</P>
<P ALIGN="JUSTIFY">…</P>
<P ALIGN="JUSTIFY">};</P></DIR>
<P ALIGN="JUSTIFY">#endif</FONT></TD>
</TR>
</TABLE>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=1><P ALIGN="CENTER">示例1-2 C++/C头文件的结构</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=4><P><A NAME="_Toc520633991"></FONT><FONT FACE="Arial" SIZE=4>1.3 </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=4>定义文件的结构</A></P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">定义文件有三部分内容:</P>
<OL>
<P ALIGN="JUSTIFY"><LI>定义文件开头处的版权和版本声明(参见示例</FONT><FONT SIZE=3>1-1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)。</LI></P>
<P ALIGN="JUSTIFY"><LI>对一些头文件的引用。</LI></P>
<P ALIGN="JUSTIFY"><LI>程序的实现体(包括数据和代码)。</LI></P></OL>
<P ALIGN="JUSTIFY">假设定义文件的名称为 graphics.cpp,定义文件的结构参见示例</FONT><FONT SIZE=3>1-3</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。</P>
<P ALIGN="JUSTIFY"></P></FONT>
<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=567>
<TR><TD VALIGN="TOP" HEIGHT=387><DIR>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P>// 版权和版本声明见示例</FONT><FONT SIZE=3>1-1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,此处省略。</P>
<P>#include </FONT><FONT SIZE=3>“graphics.h”	// </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>引用头文件</P>
<P>…</P>
<P>// 全局函数的实现体</P>
<P>void Function1(…)</P>
<P>{</P>
<P>…</P>
<P>}</P>
<P>// 类成员函数的实现体</P>
<P>void Box::Draw(…)</P>
<P>{</P>
<P>…</P></DIR>
<P ALIGN="JUSTIFY">}</FONT></TD>
</TR>
</TABLE>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=1><P ALIGN="CENTER">示例1-3 C++/C定义文件的结构</P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=4><P><A NAME="_Toc520633992"></FONT><FONT FACE="Arial" SIZE=4>1.4 </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=4>头文件的作用</A></P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">早期的编程语言如</FONT><FONT SIZE=3>Basic</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>、</FONT><FONT SIZE=3>Fortran</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>没有头文件的概念,</FONT><FONT SIZE=3>C++/C</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>语言的初学者虽然会用使用头文件,但常常不明其理。这里对头文件的作用略作解释:</P>
<P ALIGN="JUSTIFY">(</FONT><FONT SIZE=3>1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。</P>
<P ALIGN="JUSTIFY">(</FONT><FONT SIZE=3>2</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。</P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=4><P><A NAME="_Toc520633993"></FONT><FONT FACE="Arial" SIZE=4>1.5 </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=4>目录结构</A></P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分别保存于不同的目录,以便于维护。</P>
<P ALIGN="JUSTIFY">例如可将头文件保存于</FONT><FONT SIZE=3>include</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>目录,将定义文件保存于</FONT><FONT SIZE=3>source</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>目录(可以是多级目录)。</P>
<P ALIGN="JUSTIFY">如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其“声明”。为了加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P ALIGN="CENTER"><A NAME="_Toc520633994">第</FONT><FONT SIZE=5>2</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=5>章</FONT><FONT SIZE=5> </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=5>程序的版式</A></P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">	版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要构成因素。</P>
<P ALIGN="JUSTIFY">可以把程序的版式比喻为“书法”。好的“书法”可让人对程序一目了然,看得兴致勃勃。差的程序“书法”如螃蟹爬行,让人看得索然无味,更令维护者烦恼有加。请程序员们学习程序的“书法”,弥补大学计算机教育的漏洞,实在很有必要。</P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=4><P><A NAME="_Toc520633995"></FONT><FONT FACE="Arial" SIZE=4>2.1 </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=4>空行</A></P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加清晰。空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。所以不要舍不得用空行。</P>
<P ALIGN="JUSTIFY"></P>
<UL>
<B><P ALIGN="JUSTIFY"><LI>【规则</FONT><FONT SIZE=3>2-1-1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>】</B>在每个类声明之后、每个函数定义结束之后都要加空行。参见示例</FONT><FONT SIZE=3>2-1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>(</FONT><FONT SIZE=3>a</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</LI></P>
<B><P ALIGN="JUSTIFY"><LI>【规则</FONT><FONT SIZE=3>2-1-2</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>】</B>在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。参见示例</FONT><FONT SIZE=3>2-1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>(</FONT><FONT SIZE=3>b </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</LI></P></UL>
<P ALIGN="JUSTIFY"></P></FONT>
<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=567>
<TR><TD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -