代码风格好不好就像字写得好不好看一样,如果一个公司招聘秘书,肯定不要字写得难看的,同理,代码风格糟糕的程序员肯定也是不称职的。虽然编译器不会挑剔难看的代码,照样能编译通过,但是和你一个团队进行协作的其他程序员肯定受不了,甚至写完代码几天之后再来看,自己都不知道自己写的是什么。

代码和语言文字一样是为了表达思想、记载信息,所以一定要写得清楚整洁才能有效地表达。正因为如此,在一个软件项目中,代码风格一般都用文档规定死了,所有参与项目的人不管他自己原来是什么风格,都要遵守统一的风格。

下面列出一些代码风格方面的要点供大家参考:

1、每一个函数都必须有注释,即使函数短到可能只有几行。一般的函数说明,应该包含以下几个方面:

名称、函数原型、功能描述、输入参数及类型、输出参数及类型、返回及类型、实现描述、数据库相关表(如果用到的话)。头部说明需要包含包含的内容和次序如下:

/************************************************************************
* Function Name : nucFindThread
* Create Date : 2014/06/07
* Author/Corporation : your name/yourcompany name
**
Description : Find a proper thread inthread array.
* If it’s a new then search an empty.
*
* Param : ThreadNo: someParamdescription
* ThreadStatus: someParamdescription
**
Return Code : Return Code description,eg:
ERROR_Fail: not find a thread
ERROR_SUCCEED: found
*
* Global Variable : DISP_wuiSegmentAppID
* File Static Variable : naucThreadNo
* Function Static Variable : None
*
*------------------------------------------------------------------------
* Revision History
* No. Date Revised by Item Description
* V0.5 2014/06/21 your name … …
************************************************************************/
static unsigned char nucFindThread(unsignedchar ThreadNo,unsigned char ThreadStatus)
{

}

2、每个函数定义结束之后以及每个文件结束之后都要加一个或若干个空行。例如:

/************************************************************************
* ………
* Function1 Description
* ………
************************************************************************/
void Function1(……)
{

}
//Blank Line
/************************************************************************
* ………
* Function2 Description
* ………
************************************************************************/
void Function2(……)
{

}
//Blank Line
/************************************************************************
* ………
* Function3 Description
* ………
************************************************************************/
void Function3(……)
{

}
//Blank Line

3、在一个函数体内,变量定义与函数语句之间要加空行。例如:

/************************************************************************
* ………
* Function Description
*………
************************************************************************/
void Function1()
{
int n;
//Blank Line
statement1
…….
}

4、逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。例如:

//Blank Line
while (condition)
{
statement1;
//Blank Line
if(condition)
{
statement2;
}
else
{
statement3;
}
//Blank Line
statement4
}

5、复杂的函数中,在分支语句,循环语句结束之后需要适当的注释,方便区分各分支或循环体。

while (condition)
{
statement1;
if(condition)
{
for(condition)
{
Statement2;
}//end “for(condition)”
}
else
{
statement3;
}//”end if (condition)”
statement4
}//end “while (condition)”

6、修改别人代码的时候不要轻易删除别人的代码,应该用适当的注释方式。例如:

while (condition)
{
statement1;
//////////////////////////////////////
//your name , 2008/01/07 delete
//if (condition)
//{
//for(condition)
//{
//Statement2;
//}
//}
//else
//{
//statement3;
//}
////////////////////////////////////////
///////////////////////////////////////
//your name , 2000/01/07 add

new code

///////////////////////////////////////
statement4
}

7、

为了更好的阅读程序。我们需要对程序的格式排版有一定的约定。一般有4个空格的和8个空格的规定。其中有不少的大公司使用4个的。但是也有不少使用8个的。其实4个的看起来比较舒服。个人推荐使用8个的。(不使用TAB缩进)。每个编辑器的TAB键定义的空格数不一致,可能导致在别的编辑器打开你的代码乱成一团糟。

#include "stdio.h"
int main()
{
float a;
printf("Please input a number: /n");
scanf("%f",&a);
printf("%6.2f /n",a);
return (1);
}

8、在函数体的开始、结构/联合的定义、枚举的定义以及循环、判断等语句中的代码都要采用缩行。

9、同层次的代码在同层次的缩进层上

10、代码行最大长度宜控制在80 个字符以内,较长的语句、表达式等要分成多行书写。

11、长表达式要在低优先级操作符处划分新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。例如:

if ((very_longer_variable1 >=very_longer_variable12)
&&(very_longer_variable3 <=very_longer_variable14)
&&(very_longer_variable5 <=very_longer_variable16))
{
dosomething();
}
for (very_longer_initialization;
very_longer_condition;
very_longer_update)
{
dosomething();
}

12、如果函数中的参数较长,则要进行适当的划分。例如:

void function(float very_longer_var1,
float very_longer_var2,
float very_longer_var3)

13、用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。例如:

int aiMinValue;
int aiMaxValue;
int niSet_Value(…);
int niGet_Value(…);

14、如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。例如:

  leap_year = ((year % 4 == 0) && (year % 100 != 0)) || (year %400 == 0);

15、不要编写太复杂的复合表达式。例如下面的复合表达式过于复杂:

   i= a >= b&&c < d && c + f <= g + h; 

16、不要有多用途的复合表达式。例如:

   d= (a = b + c) + r;

该表达式既求a 值又求d 值。应该拆分为两个独立的语句:

   a= b + c;
d= a + r;

17、尽量避免含有否定运算的条件表达式。例如:

   if(!(num >= 10))
应改为:
if(num < 10)

18、参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。如果函数没有参数,则用void 填充。

19、变量命名一般使用匈牙利命名规则:就是在变量名前添加表示变量类型的缩写来命名变量。比如int型的变量命名可以用iLoop来表示,string类型的用strName。不过这些已经不一定被采用了。大概是因为现在的编译器的改进和其命名的繁琐。如今的Microsoft .net下你如果将鼠标停留在变量上一段时间就可以见到相关提示。Eclipse下的同样如此。

在局部变量时可以使用l前缀。而全局变量科研使用g前缀加以区分。如果没有这样的机制,在程序编程时有可能出现同名。从而局部变量将会覆盖全局变量带来麻烦等。

常量可以使用全部大写以区别。 变量应该使用具有具体意思的命名。

C语言入门(19)——C语言的编码风格的更多相关文章

  1. c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码初级:C语言入门必备(以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言的数 ...

  2. 【转】c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码 初级:C语言入门必备 (以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言 ...

  3. 【R语言入门】R语言中的变量与基本数据类型

    说明 在前一篇中,我们介绍了 R 语言和 R Studio 的安装,并简单的介绍了一个示例,接下来让我们由浅入深的学习 R 语言的相关知识. 本篇将主要介绍 R 语言的基本操作.变量和几种基本数据类型 ...

  4. Python入门基础:代码的编码风格

    每种语言都有自己的编码风格,对于Python这种比较注重于空格的影响的代码而言,其风格也是相当重要的. 主要包括以下几点: 1:使用 4 空格缩进,而非 TAB  .在小缩进(可以嵌套更深)和大缩进( ...

  5. Go语言入门篇-Golang之文本编码处理

    Golang之文本编码处理

  6. c语言入门这一篇就够了-学习笔记(一万字)

    内容来自慕课网,个人学习笔记.加上了mtianyan标签标记知识点. C语言入门 -> Linux C语言编程基本原理与实践 -> Linux C语言指针与内存 -> Linux C ...

  7. 编程入门选什么语言好?C 语言还是Python ?为你解析

    前面我分享过计算机行业已经成了学校选择排名第一,家长和学生都很看好计算机类专业.现在IT行业也越来越火爆,程序员越来越被人看好.面对相比同龄人高薪资的诱惑,人们很难不心动,即使秃头也值得! 那么问题来 ...

  8. 【南阳OJ分类之语言入门】80题题目+AC代码汇总

    小技巧:本文之前由csdn自动生成了一个目录,不必下拉一个一个去找,可通过目录标题直接定位. 本文转载自本人的csdn博客,复制过来的,排版就不弄了,欢迎转载. 声明: 题目部分皆为南阳OJ题目. 代 ...

  9. 《C语言入门1.2.3—一个老鸟的C语言学习心得》—清华大学出版社炮制的又一本劣书及伪书

    <C语言入门1.2.3—一个老鸟的C语言学习心得>—清华大学出版社炮制的又一本劣书及伪书 [薛非评] 区区15页,有80多个错误. 最严重的有: 通篇完全是C++代码,根本不是C语言代码. ...

  10. Swift语言入门之旅

    Swift语言入门之旅  学习一门新的计算机语言,传统来说都是从编写一个在屏幕上打印"Hello world"的程序開始的.那在 Swift,我们使用一句话来实现它: printl ...

随机推荐

  1. ssh username@10.2.1.23无法连接

    ssh username@10.2.1.23无法连接 经过排查各种openSSH版本等,最终因为两个机器不是一个段(A:255.255.0.0 B:255.255.255.0)造成的. 关于IP需要以 ...

  2. FMDB将对象放进数据库[二](使用runtime)

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  3. MySQL load data infile

    语法: load data [low_priority] [local] infile ‘file_path' [replace] [ignore] into table table_name [(c ...

  4. SQL Server 对表的 12 种一般性操作

    01. 创建 create table Strings(ID int);    go 02. 为表添加列 alter table Strings    add String nvarchar(32); ...

  5. HttpClient post 请求实例

    所需jar包: commons-codec-1.3.jar commons-httpclient-3.0.jar commons-logging-1.1.1.jar /** * */ package ...

  6. IP defragment

    snort IP defragment 模型: BSD favors an original fragment with an offset that is less than or equal to ...

  7. Web.config中rewite 节点引起的500.19错误

    刚刚接手一个外包的小项目,客户给了发布后的网站文件和数据库,想在本地搭建一套环境先运行下看看网站原有的效果.数据库还原什么都弄好了,数据库字符串也配置好,部署在本地IIS里面,访问了下,结果看到的是5 ...

  8. Linux内核中常见内存分配函数(二)

    常用内存分配函数 __get_free_pages unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) __get_f ...

  9. sql server中的 stuff 函数

    STUFF eg: SELECT stuff(12345,3,1,'-') result:    12-45 以下文段来自:http://www.cnblogs.com/lingxyd/archive ...

  10. 动态代理双剑客--JDK Proxy与CGLIB

    背景: 研究过设计模式的同胞们都知道代理模式可以有两种实现方案: 1.接口实现(或继承抽象类) 核心代码片段 ProxySubject-->>doOperation() //dosomet ...