当前位置:首页 > 黑客技术 > 正文内容

c代码注释规范(c#注释代码)

hacker2年前 (2022-06-25)黑客技术93

本文目录一览:

C语言程序注释

C语言编程规范-注释

规则:

1:一般情况下,源程序有效注释量必须在20%以上。

说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。

2:说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。

示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。

Copyright (C), 1988-1999, Tech. Co., Ltd.

File name: // 文件名

Author:

Version:

Date: // 作者、版本及完成日期

Description: // 用于详细说明此程序文件完成的主要功能,与其他模块

// 或函数的接口,输出值、取值范围、含义及参数间的控

// 制、顺序、独立或依赖等关系

Others: // 其它内容的说明

Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明

1. ....

History: // 修改历史记录列表,每条修改记录应包括修改日期、修改

// 者及修改内容简述

1. Date:

Author:

Modification:

2. ...

3:源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。

示例:下面这段源文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。

Copyright (C), 1988-1999, Tech. Co., Ltd.

FileName: test.cpp

Author:

Version :

Date:

Description: // 模块描述

Version: // 版本信息

Function List: // 主要函数及其功能

1. -------

History: // 历史修改记录

author time version desc

David 96/10/12 1.0 build this moudle

说明:Description一项描述本文件的内容、功能、内部各部分之间的关系及本文件与其它文件关系等。History是修改历史记录列表,每条修改记录应包括修改日期、修改者及修改内容简述。

4:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。

示例:下面这段函数的注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。

Function: // 函数名称

Description: // 函数功能、性能等的描述

Calls: // 被本函数调用的函数清单

Called By: // 调用本函数的函数清单

Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)

Table Updated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)

Input: // 输入参数说明,包括每个参数的作

// 用、取值说明及参数间关系。

Output: // 对输出参数的说明。

Return: // 函数返回值的说明

Others: // 其它说明

5:边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。

6:注释的内容要清楚、明了,含义准确,防止注释二义性。

说明:错误的注释不但无益反而有害。

7:避免在注释中使用缩写,特别是非常用缩写。

说明:在使用缩写时或之前,应对缩写进行必要的说明。

8:注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。

示例:如下例子不符合规范。

例1:

/* get replicate sub system index and net indicator */

repssn_ind = ssn_data[index].repssn_index;

repssn_ni = ssn_data[index].ni;

例2:

repssn_ind = ssn_data[index].repssn_index;

repssn_ni = ssn_data[index].ni;

/* get replicate sub system index and net indicator */

应如下书写

/* get replicate sub system index and net indicator */

repssn_ind = ssn_data[index].repssn_index;

repssn_ni = ssn_data[index].ni;

9:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。变量、常量、宏的注释应放在其上方相邻位置或右方。

示例:

/* active statistic task number */

#define MAX_ACT_TASK_NUMBER 1000

#define MAX_ACT_TASK_NUMBER 1000 /* active statistic task number */

10:数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方。

示例:可按如下形式说明枚举/数据/联合结构。

/* sccp interface with sccp user primitive message name */

enum SCCP_USER_PRIMITIVE

N_UNITDATA_IND, /* sccp notify sccp user unit data come */

N_NOTICE_IND, /* sccp notify user the No.7 network can not */

/* tran *** ission this message */

N_UNITDATA_REQ, /* sccp user's unit data tran *** ission request*/

11:全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。

示例:

/* The ErrorCode when SCCP translate */

/* Global Title failure, as follows */ // 变量作用、含义

/* 0 - SUCCESS 1 - GT Table error */

/* 2 - GT error Others - no use */ // 变量取值范围

/* only function SCCPTranslate() in */

/* this modual can modify it, and other */

/* module can visit it through call */

/* the function GetGTTransErrorCode() */ // 使用 ***

BYTE g_GTTranErrorCode;

12:注释与所描述内容进行同样的缩排。

说明:可使程序排版整齐,并方便注释的阅读与理解。

示例:如下例子,排版不整齐,阅读稍感不方便。

void example_fun( void )

/* code one comments */

CodeBlock One

/* code two comments */

CodeBlock Two

应改为如下布局。

void example_fun( void )

/* code one comments */

CodeBlock One

/* code two comments */

CodeBlock Two

13:将注释与其上面的代码用空行隔开。

示例:如下例子,显得代码过于紧凑。

/* code one comments */

program code one

/* code two comments */

program code two

应如下书写

/* code one comments */

program code one

/* code two comments */

program code two

14:对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。

说明:这些语句往往是程序实现某一特定功能的关键,对于维护人员来说,良好的注释帮助更好的理解程序,有时甚至优于看设计文档。

15:对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。

说明:这样比较清楚程序编写者的意图,有效防止无故遗漏break语句。

示例(注意斜体加粗部分):

case CMD_UP:

ProcessUp();

break;

case CMD_DOWN:

ProcessDown();

break;

case CMD_FWD:

ProcessFwd();

if (...)

break;

else

ProcessCFW_B(); // now jump into case CMD_A

case CMD_A:

ProcessA();

break;

case CMD_B:

ProcessB();

break;

case CMD_C:

ProcessC();

break;

case CMD_D:

ProcessD();

break;

建议:

1:避免在一行代码或表达式的中间插入注释。

说明:除非必要,不应在代码或表达中间插入注释,否则容易使代码可理解性变差。

2:通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的。

说明:清晰准确的函数、变量等的命名,可增加代码可读性,并减少不必要的注释。

3:在代码的功能、意图层次上进行注释,提供有用、额外的信息。

说明:注释的目的是解释代码的目的、功能和采用的 *** ,提供代码以外的信息,帮助读者理解代码,防止没必要的重复注释信息。

示例:如下注释意义不大。

/* if receive_flag is TRUE */

if (receive_flag)

而如下的注释则给出了额外有用的信息。

/* if mtp receive a message from links */

if (receive_flag)

4:在程序块的结束行右方加注释标记,以表明某程序块的结束。

说明:当代码段较长,特别是多重嵌套时,这样做可以使代码更清晰,更便于阅读。

示例:参见如下例子。

if (...)

// program code

while (index MAX_INDEX)

// program code

} /* end of while (index MAX_INDEX) */ // 指明该条while语句结束

} /* end of if (...)*/ // 指明是哪条if语句结束

5:注释格式尽量统一,建议使用"/* …… */"。

6:注释应考虑程序易读及外观排版的因素,使用的语言若是中、英兼有的,建议多使用中文,除非能用非常流利准确的英文表达。

说明:注释语言不统一,影响程序易读性和外观排版,出于对维护人员的考虑,建议使用中文。

在一个C源程序中,注释部分两侧的分界符分别为________和________

在一个C源程序中,注释部分两侧的分界符分别为 /* 和 */。

C语言中,注释有两种类型

1、单行注释

单行注释通常用于对程序中的某一行代码进行解释,用”//”符号表示,后面为注释的内容

示例代码

Printf("Hello,world\n");       //输出Hello,world

2、多行注释

多行注释就是注释中的代码,可以为多行,以符号”/*“开头,以符号”*/”结尾

示例代码

/* printf("Hello,world\n");

return 0;    */

扩展资料:

c语言注释规范

1、边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。

2、注释的内容要清楚、明了,含义准确,防止注释二义性。

3、注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。

c语言中注释的位置

1、可以使用/*和*/分隔符来标注一行内的注释,也可以标注多行的注释。例如,在下列的函数原型中,省略号的意思是 open() 函数有第三个参数,它是可选参数。注释解释了这个可选参数的用法:

int open( const char *name, int mode, … /* int permissions */ );

2、可以使用//插入整行的注释,或者将源代码写成两列分栏的格式,程序在左列,注释在右列:

const double pi = 3.1415926536;       // pi是—个常量

扩展资料

在 C99 标准中,单行注释正式加入C语言,但是大部分编译器在 C99 之前就已经开始支持这种用法。有时候,其被称作“C++风格”的注释,但实际上,其源自于C的前身 BCPL。

1、在引号中,如果采用/*或//分隔一个字符常量或字符串字面量(string literal),它们都不会被视为注释的开始。例如,下面语句就没有注释:

printf("Comments in C begin with /* or //.\n" );

2、预处理器仅通过检查注释的结束符来检测注释中的字符,因此,不能嵌套块注释。然而,可以使用/*和*/注释包含单行注释的源代码:

/* 暂时注释掉这两行:

  const double pi = 3.1415926536;  // pi是一个常量

  area = pi * r * r;   // 计算面积

暂时注释到此 */

如何让C++中的代码规范一点

1.关键字if, while, for与其后的控制表达式的(括号之间插入一个空格分隔,但括号内的表达式应紧贴括号。

例如:while ␣(1);

2.双目运算符的两侧插入一个空格分隔,单目运算符和操作数之间不加空格。

例如:i␣=␣i␣+␣1、++i、!(i␣␣1)、-x、a[1]等。

3.后缀运算符和操作数之间也不加空格。

例如:取结构体成员s.a、函数调用foo(arg1)、取数组成员a[i]。

4. 、,号和;号之后要加空格,这是英文的书写习惯。

例如:for␣(i␣=␣1;␣i␣␣10;␣i++)、foo(arg1,␣arg2)。

5.以上关于双目运算符和后缀运算符的规则不是严格要求,有时候为了突出优先级也可以写得更紧凑一些.

例如:for␣(i=1;␣i10;␣i++)、distance␣=␣sqrt(x*x␣+␣y*y)等。但是省略的空格一定不要误导了读代码的人,例如a||b␣␣c很容易让人理解成错误的优先级。

6.由于标准的Linux终端是24行80列的,接近或大于80个字符的较长语句要折行写,折行后用空格和上面的表达式或参数对齐。

例如: if␣(sqrt(x*x␣+␣y*y) 5.0

␣x␣␣0.0

␣y␣␣0.0)

缩进

内核关于缩进的规则有以下几条:

1.要用缩进体现出语句块的层次关系,使用Tab字符缩进,不能用空格代替Tab。函数里面的代码,也称为代码块或复合代码,要求进行缩进。遇到循环和分支结构的处理,循环和分支下的代码块要求再进行缩进,假设循环和分支里又嵌套了循环和分支,代码块应该层层缩进

2.if/else、while、do/while、for、switch这些可以带语句块的语句,语句块的{和}应该和关键字写在一起,用空格隔开,而不是单独占一行。

例如应该这样写:

if␣(...)␣{

→语句列表

}␣else␣if␣(...)␣{

→语句列表

更多的人习惯这样写:

If ␣(…)

→语句列表

else if ␣(…)

→语句列表

内核的写法和[KR]一致,好处是不必占用太多空行,使得一屏能显示更多代码。这两种写法用得都很广泛,只要在同一个项目中能保持统一就可以了。

3.函数定义的{和}单独占一行,这一点和语句块的规定不同.

例如 :

int sum(int a, int b)

语句列表;

4. switch和语句块里的case、default对齐写,也就是说语句块里的case、 default相对于switch不往里缩进。

例如:

switch(…) {

case ‘A’:

语句列表;

case ‘B’:

语句列表;

default:

语句列表;

5.一行只写一条语句

6.代码中每个逻辑段落之间应该用一个空行分隔开。例如每个函数定 义之间应该插入一个空行,头文件、全局变量定义和函数定义之间也应该插入空行.

7.在分支和循环中不管有一条还是多条语句建议都要加上“{}”

注释

1.单行注释应采用/*␣comment␣*/的形式,用空格把界定符和文字分开。

2.整个源文件的顶部注释。说明此模块的相关信息,例如文件名、作者和版本历史等,顶头写不缩进。

3.相对独立的语句组注释。对这一组语句做特别说明,写在语句组上侧,和此语句组之间不留空行,与当前语句组的缩进一致。注意,说明语句组的注释一定要写在语句组上面,不能写在语句组下面。

4.代码行右侧的简短注释。对当前代码行做特别说明,一般为单行注释,和代码之间至少用一个空格隔开,一个源文件中所有的右侧注释更好能上下对齐。

标识符的命名规范

标识符的命名要清晰明了,可以使用完整的单词和大家易于理解的缩写。短的单词可以通过去元音形成缩写,较长的单词可以取单词的头几个字母形成缩写,也可以采用大家基本认同的缩写。例如count写成cnt,block写成blk,length写成len,window写成win,message写成msg,temporary可以写成temp,也可以进一步写成tmp。

内核风格规定变量、函数和类型采用全小写加下划线的方式命名,常量(宏定义和枚举常量)采用全大写加下划线的方式命名。如函数名radix_tree_insert、类型名struct radix_tree_root。

常量的命名规范:每一个英文字符大写 ,每个单词之间可以用‘_’连接 RADIX_TREE_MAP_SHIFT等。

标签的命名规范

要求有一定的描述性,顶端左对齐

全局变量和全局函数的命名一定要详细,不惜多用几个单词多写几个下划线,例如函数名radix_tree_insert,因为它们在整个项目的许多源文件中都会用到,必须让使用者明确这个变量或函数是干什么用的。局部变量和只在一个源文件中调用的内部函数的命名可以简略一些,但不能太短,不要使用单个字母做变量名,只有一个例外:用i、j、k做循环变量是可以的。

针对中国程序员的一条特别规定:禁止用汉语拼音作为标识符名称,可读性极差。

函数的编码风格

每个函数都应该设计得尽可能简单,简单的函数才容易维护。应遵循以下原则:

实现一个函数只是为了做好一件事情,不要把函数设计成用途广泛、面面俱到的,这样的函数肯定会超长,而且往往不可重用,维护困难。

函数内部的缩进层次不宜过多,一般以少于4层为宜。如果缩进层次太多就说明设计得太复杂了,应该考虑分割成更小的函数来调用。

函数不要写得太长,建议在24行的标准终端上不超过两屏,太长会造成阅读困难,如果一个函数超过两屏就应该考虑分割函数了。

执行函数就是执行一个动作,函数名通常应包含动词,例如get_current、radix_tree_insert。

比较重要的函数定义上面必须加注释,说此函数的功能、参数、返回值、错误码等。

另一种度量函数复杂度的办法是看有多少个局部变量,5到10个局部变量就已经很多了,局部变量再多就很难维护了,应该考虑分割函数。

函数参数的防错设计

程序一般分为Debug 版本和Release 版本,Debug 版本用于内部调试,Release 版本发行给用户使用。

在编写函数时,要进行反复的考查,并且自问:“我打算做哪些假定?”一旦确定了的假定,就要使用断言对假定进行检查。使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。

在函数的入口处,使用断言检查参数的有效性(合法性)。

assert(表达式); 的意思是:当表达式为真时,程序继续运行,如果表达市为假,那程序就会停止运行,并提示错误信息。

#include stdio.h

#include assert.h

void test(char *p)

assert(p != NULL);

printf("p=%s\n",p);

程序说明:由于我们在main函数中传了NULL指针值给test函数,在test函数执行到assert(p != NULL);发现表达式不为真,就终止了程序的运行,并提示错误的行数信息。

注意:由于assert是一个宏,只在debug版本中起作用,所以assert一般只用于内部函数对参数有效性进行检查,如果该函数作为一个外部接口来使用时,一般需要利用if,else语句进行防错设计。

函数注释:说明此函数的功能、参数、返回值、错误码等,写在函数定义上侧,和此函数定义之间不留空行,顶头写不缩进。

function:判断分数格式是否正确

params:score 客户输入的分数

returns:1 分数格式正确 0 分数格式错误

int IsValidScore(char *score)

函数内的注释要尽可能少用。注释只是用来说明你的代码能做什么(比如函数接口定义),而不是说明怎样做的,只要代码写得足够清晰,怎样做是一目了然的,如果你需要用注释才能解释清楚,那就表示你的代码可读性很差,除非是特别需要提醒注意的地方才使用函数内注释。

编程好习惯

初始化变量

尽可能使用局部变量

一个函数只有一个紧凑的职责

避免函数过长避免函数嵌套过深

不要拘泥于小节

扫描二维码推送至手机访问。

版权声明:本文由黑客24小时在线接单网站发布,如需转载请注明出处。

本文链接:http://www.cn-sl.com/129755.html

分享给朋友:

“c代码注释规范(c#注释代码)” 的相关文章

汽车价格排行榜前十名,汽车排名前十

各年纪 段的用户集体皆有。品牌代价 : 四 三 九点 三0亿美圆,那是世界汽车排名汽车第一位:黄金跑车,依据 昨天的汇率是 一英镑比 一 一点 八R这么那车如今 是 一 二亿阁下 ,第一位Bugatti Veyron 一 六点 四产天:法国价钱 : 一 一 九 二0 五 七美圆Bugatti Vey...

现在千足金多少钱一克_千足金回收多少钱一克最新

DOL,当然您收受接管 入珠宝店后,昨天千足金价钱 若干 钱一克?千足金尾饰价钱 若干 钱如今 ,否则 人野怎么进修 。QE,一高如今 千足金的价钱 正在若干 钱一克?正常添工费是一克要.确定 是收受接管 啊,借要万万 忘住购黄金时。  三 三 八元,正常的皆没有支, 二0 一 五年 五月 一 四日...

正邦饲料多少钱一吨 「贵阳正邦饲料联系电话」

那个反诈骗德律风 便会挨给您,小猪预混料正常正在 六000元阁下 ,详细 价钱 纷歧 样,这么那种情形 之高,自乱区设坐分。 宝积饲料厂野曲销,邪邦的猪饲料正常皆患上正在本地 署理 商」拿货,自 一 九 八 四年于今,或者者说是被许多 人举报过,贱阴邪邦畜牧有限私司若干 是 二00 六-0 八- 二...

深圳公租房在哪里(深圳平湖公租房在哪里)

起源 :读特 龙岗区保持 平易近 熟劣先,出力 解决户籍正在册轮候低保、低保边沿 ,残疾人、抚恤定剜劣抚工具 及计熟坚苦 野庭的住房坚苦 ,提下房源设置装备摆设 效力 ,区住修部分 多举动 筹散私租房腾退房源 一 三0套入止定背配租。 据相识 ,此次龙岗区户籍正在册轮候特殊坚苦 野庭定背配租私共...

红米手机中关村在线 - 荣耀手机中关村在线

统一 个价钱 区间的二款脚机,钱没有多又念游戏的购红米 Kirin 九 三 五。智能单地线,而红米脚机是小米脚机的子品牌,参数比照-ZOL外闭村正在线http/detazccn/ProductComp_param_ 三 四 二 八 九 六- 三 九 八 五html二款脚机的。 外肯,但要说那个价钱...

记账卡etc怎么缴费(记账卡etc需要充值吗)

ETC扣费问信 Q 一:节沐日 下速收费通止却发生 扣费? 收费通止仅 对于 七座及如下载客车辆,如你是 七座以上则一般支费; 没下速空儿未没有正在收费空儿段,好比  二0 二 一年明朗 收费通止空儿是 二0 二 一年 四月 三日0时至 四月 五日 二 四时,你正在收费空儿内上下速,但高下速是...

评论列表

听弧西奺
2年前 (2022-06-26)

变量名,只有一个例外:用i、j、k做循环变量是可以的。 针对中国程序员的一条特别规定:禁止用汉语拼音作为标识符名称,可读性极差。函数的编码风格每个函数都应该设计得尽可能简单,简单的函数才容易维护。应遵循以下原则: 实现一个函数只是为了做好一件事情,不要把函

性许路岷
2年前 (2022-06-26)

mments */ CodeBlock One /* code two comments */ CodeBlock Two}应改为如下布局。void examp

世味比忠
2年前 (2022-06-26)

中,注释部分两侧的分界符分别为 /* 和 */。C语言中,注释有两种类型1、单行注释单行注释通常用于对程序中的某一行代码进行解释,用”//”符号表示,后面为注释的内容示例代码Printf("

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。