C 编程最佳实践
简介
本文是为了满足开发人员的需要而写的。我们总结了一套指南,无论作为开发人员还是顾问,这些指南多年来一直都很好地指导着我们,我们把它们作为建议提供给您,希望对您的工作有所帮助。您也许不赞同其中的某些指南,但我们希望您会喜欢其中的一些并在您的编程或移植项目中使用它们。
风格与指南
使用一种使代码具有可读性和一致性的源代码风格。如果没有团队代码风格或自己的风格,您可以使用与大多数 C 程序员采用的 Kernighan 和 Ritchie 风格相似的风格。然而,举一个极端的例子,有可能最终会写出与下面相似的代码:
int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);
— 1984 年模糊 C 代码大赛“差劲奖”。应代码作者要求匿名。
通常将主例程定义为 main()。对应的 ANSI 编写方式是 int main(void)(如果不考虑命令行参数的话)或 int main( int argc, char **argv )。ANSI 以前的编译器会省略 void声明,或列出变量名以及紧随其后的声明。
空格
充分利用水平和垂直空格。缩进和空格间距应反映出代码的块结构。
应将条件运算符的长字符串分割成单独的几行。例如:
if (foo->next==NULL && number < limit && limit <=SIZE
&& node_active(this_input)) {...
最好改成:
if (foo->next == NULL
&& number < limit && limit <= SIZE
&& node_active(this_input))
{
...
同样,应将描述得很详细的 for 循环分割成不同的行:
for (curr = *varp, trail = varp;
curr != NULL;
trail = &(curr->next), curr = curr->next )
{
...
对于其它复杂表达式(如使用三元运算符 ?:的表达式),最好也将其分割成数行。
z = (x == y)
? n + f(x)
: f(y) - n;
注释
注释应描述正在发生什么事、如何完成它、参数表示什么、使用了哪些全局变量以及任何限制或错误。但要避免不必要的注释。如果代码比较清晰,并且使用了良好的变量名,那么它应该能够较好地说明自身。因为编译器不检查注释,所以不保证它们是正确的。与代码不一致的注释会起到相反的作用。过多的注释会
相关文档:
// SnakeMatrix.cpp : Defines the entry point for the console application.
// Create by Xianyi.Ye, May 4,2010
#include "stdafx.h"
#include <iostream.h>
/*
Question: Print a Sanke Matrix as following
i\j 1 2 3 4 5 6
1 1 2 9 10 25 26
2 4 3 8 11 24 27
3 5 6 7 12 23 28
4 16 15 14 ......
1 前言
长期以来,广大程序员为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序可维护性差,布置困难,升级不方便,维护成本高就是一个相当重要的因素。有很多企业用户就是因为这个原因而放弃使用C/S。然而当一个应用必须要使用C/S结构才能很好的实现其功能的时 ......
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如Smart Pointer,Garbage Collection等。Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题;Garbage Collection技术在Java中已经 ......
#include
using namespace std;
typedef struct lnode
{
long sno;
char name[20];
struct lnode *next;
}LNode, *LinkList;
LinkList InitList()
{
LinkList head;
head = new LNode;
&nb ......