C语言 程序代码编写规范

前言

一个好的程序编写规范是编写高质量程序的保证。清晰、规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性。

说明

l 本文档主要适用于刚刚开始接触编程的初学者。

l 对于具有一定工程项目开发经验的程序员,建议学习C语言程序代码编写规范—高级版。

目录

1 代码书写规范

2 注释书写规范

3 命名规范

4 其它一些小技巧和要求

1 代码书写规范

1.1函数定义

花括号: { }

每个函数的定义和说明应该从第1列开始书写。函数名(包括参数表)和函数体的花括号应该各占一行。在函数体结尾的括号后面可以加上注释,注释中应该包括函数名,这样比较方便进行括号配对检查,也可以清晰地看出来函数是否结束。

范例1:函数的声明

void matMyFunction(int n)

{

……

} /* matMyFunction*/

1.2空格与空行的使用

要加空格的场合

l 在逗号后面和语句中间的分号后面加空格,如:

int i, j, k;

for (i = 0; i < n; i++)

result = func(a, b, c);

l 在二目运算符的两边各留一个空格,如

a > b    a <= b  i = 0

l 关键字两侧,如if () 不要写成if() 

l 类型与指针说明符之间一定要加空格:

char *szName;

不加空格的场合

l 在结构成员引用符号.和->左右两加不加空格:

pStud->szName,  Student.nID

l 不在行尾添加空格或Tab

l 函数名与左括号之间不加空格:

 func()

l 指针说明符号*与变量名间不要加空格:

int *pInt; 不要写成: int * pInt;

l 复合运算符中间不能加空格,否则会产生语法错误,如:

a + = b      a < = b    都是错误的

空行与换行

l 函数的变量说明与执行语句之间加上空行;

l 每个函数内的主要功能块之间加空行表示区隔;

l 不要在一行中写多条语句.

范例2:空行与换行

int main()

{

    int i, j, nSum = 0;  //变量说明

    

    for (i = 0; i < 10; i++)  //执行代码

    {

for (j = 0; j < 10; j++)

{

     nSum += i;

}

    }

}

1.3缩进的设置

根据语句间的层次关系采用缩进格式书写程序,每进一层,往后缩进一层

有两种缩进方式:1,使用Tab键;2采用4个空格。

整个文件内部应该统一,不要混用Tab键和4个空格,因为不同的编辑器对Tab键的处理方法不同。

1.4折行的使用

· 每行的长度不要超过80个字符,当程序行太长时,应该分行书写。

· 当需要把一个程序行的内容分成几行写时,操作符号应该放在行末。

· 分行时应该按照自然的逻辑关系进行,例如:不要把一个简单的逻辑判断写在两行上。

· 分行后的缩进应该按照程序的逻辑关系进行对齐。例如:参数表折行后,下面的行应该在参数表左括号的下方。

范例2:折行的格式

dwNewShape = matAffineTransform(coords, translation,

  rotation);

if (((new_shape.x > left_border) &&

(new_shape.x < right_border)) &&

((new_shape.y > bottom_border) &&

(new_shape.y < top_border)))

{

    draw(new_shape);

}

1.5嵌套语句(语句块)的格式

对于嵌套式的语句--即语句块(如,if、while、for、switch等)应该包括在花括号中。花括号的左括号应该单独占一行,并与关键字对齐。建议即使语句块中只有一条语句,也应该使用花括号包括,这样可以使程序结构更清晰,也可以避免出错。建议对比较长的块,在末尾的花括号后加上注释以表明该语言块结束。

范例3:嵌套语句格式

if (value < max) 

{

    if (value != 0)

    {

         func(value);

    }

}

} else {

    error("The value is too big.");

} /* if (value < max) */

2 注释书写规范

注释必须做到清晰,准确地描述内容。对于程序中复杂的部分必须有注释加以说明。注释量要适中,过多或过少都易导致阅读困难。

2.1注释风格

· C语言中使用一组(/* … */)作为注释界定符。

· 注释内容尽量用英语方式表述。

· 注释的基本样式参考范例4。

· 注释应该出现在要说明的内容之前,而不应该出现在其后。

· 除了说明变量的用途和语言块末尾使用的注释,尽量不使用行末的注释方式。

范例4:几种注释样式

/*

* ************************************************

* 强调注释

* ************************************************

*/

/*

* 块注释

*/

/* 单行注释 */

//单行注释

int i; /*行末注释*/

2.2何时需要注释

· 如果变量的名字不能完全说明其用途,应该使用注释加以说明。

· 如果为了提高性能而使某些代码变得难懂,应该使用注释加以说明。

· 对于一个比较长的程序段落,应该加注释予以说明。如果设计文档中有流程图,则程序中对应的位置应该加注释予以说明。

· 如果程序中使用了某个复杂的算法,建议注明其出处。

· 如果在调试中发现某段落容易出现错误,应该注明。

3 命名规范

3.1常量、变量命名

l 符号常量的命名用大写字母表示。如:

#define LENGTH 10

l 如果符号常量由多个单词构成,两个不同的单词之间可以用下划线连接。如:

#define MAX_LEN 50

变量命名的基本原则:

l 可以选择有意义的英文(小写字母)组成变量名,使人看到该变量就能大致清楚其含义。

l 不要使用人名、地名和汉语拼音。

l 如果使用缩写,应该使用那些约定俗成的,而不是自己编造的。

l 多个单词组成的变量名,除第一个单词外的其他单词首字母应该大写。如:

dwUserInputValue。

3.2函数命名

函数命名原则与变量命名原则基本相同。对于初学者,函数命名可以采用“FunctionName”的形式。

4 其它一些小技巧和要求

l 函数一般情况下应该少于100

l 函数定义一定要包含返回类型,没有返回类型加void

l 写比较表达式时,将常量放在左边

10 == n

NULL != pInt

l 指针变量总是要初始或重置为NULL

l 使用{}包含复合语句,即使是只有一行,如:

if (1 == a)

{

    x = 5;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

The size of tensor a (4) must match the size of tensor b (3) at non-singletonThe size of

报错&#xff1a; RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at non-singleton 解决&#xff1a; img Image.open(image_path) 改为 img Image.open(image_path).convert(RGB)。 完成~

excel高级筛选怎么用_python中实现excel的高级筛选

一Excel里的高级筛选功能&#xff0c;着实令人惊叹&#xff0c;VBA里实现起来也相对简单&#xff0c;就是手动操作的代码化&#xff0c;设置好三项参数&#xff0c;便可以随取随用&#xff0c;效果稳准快。二在python 中实现同样的目的&#xff0c;更为直白爽快&#xff0c;不信…

mysql添加字段语句

1.添加 varchar类型的字段&#xff1a; alter table b_warehouse_message add column entity_warehouse_no_test varchar(48) CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT 实体仓库代码; alter table b_warehouse_message change entity_warehouse_no_test entity_war…

linux usb学习笔记

USB 设备基础知识 usb端点 usb端点用一个结构体来描述   USB 端点在内核中使用结构 struct usb_host_endpoint 来描述. 这个结构包含真实的端点信息在另一个结构中, 称为 struct usb_endpoint_descriptor. 后者包含所有的 USB-特定 数据, 以设备自身特定的准确格式. 驱动关…

cv2.error: OpenCV(4.5.2) : -1 : error: (-5:Bad argument) in function ‘rectangle‘

在使用opencv画矩形框的时候下面的这行出现了错误&#xff1a; cv2.rectangle(img, (22.0, 3.0),(33.0, 45.0), translate_color(classes[k]), 3, 1) cv2.error: OpenCV(4.5.2) : -1 : error: (-5:Bad argument) in function ‘rectangle’ Overload resolution failed: Can’t…

电脑如何测网速_物联网卡的网速到底怎么样呢

最近不少朋友发私信问我&#xff0c;物联网卡网速到底怎么样&#xff0c;和手机卡的网速有没有什么区别&#xff1f;其实关于网速这个问题&#xff0c;我已经重复解释了很多遍。只要是走公网的流量卡&#xff0c;在不限速的情况下&#xff0c;基本是和你手机卡网速是一致的&…

捡起JavaScript(1)

JS原型介绍 原型的作用是什么&#xff1f; 大家知道的JS不是面向对象的语言&#xff0c;就没有面向对象的继承的概念。那么原型就是用来弥补JS继承功能的。 下面有三个思想需要明确 在JavaScript世界中一切都是对象。一切对象都是由方法new出来的。所有的JavaScript的变量最终都…

git入门学习笔记

安装和配置 安装 #sudo apt-get install git #sudo apt-get install git-doc git-svn git-email git-gui gitk 如果是第一次使用git&#xff0c;需要进行如下设置&#xff1a; #git config--global user.name "weiqifa" #git config--global user.email "ww…

Expected more than 1 value per channel when training, got input size torch.Size

Expected more than 1 value per channel when training, got input size torch.Size 训练的时候&#xff0c;batch size必须大于1&#xff0c;但是预测的时候&#xff0c;batch size可以等于1 原因&#xff1a; 因为模型中用了batchnomolization&#xff0c;训练中用batch训…

dll可以在linux下使用吗_Linux下安装和使用杀毒软件AntiVir

小白玩转智能数据湖&#xff0c;20分钟开发实时豆瓣评分Top20电影的脚本&#xff01;>>> 提起计算机病毒来&#xff0c;可谓人人皆知&#xff0c;有些吃过病毒苦头的人更是有点谈虎色变的感觉。其实无论对于企业还是个人&#xff0c;病毒的危害都是不可避免的&#xf…

[转]微信小程序登录逻辑梳理

本文转自&#xff1a;http://www.jianshu.com/p/d9996cafdb31 官方文档 文档相关地址: 用户登录 获取用户数据 用户数据的签名验证和加解密 登录时序图.png微信两个api所拿到的信息:login和getUserInfo 返回的信息.png注册/登录 小程序端: 通过上面wx.login和wx.getUserInfo两个…

应用matplotlib的imshow函数显示彩色图像(RGB data)报错的解决方法

何时出现错误提示 :”Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers)”&#xff1f;在Python中&#xff0c;使用 matplotlib 的函数&#xff1a;plt.imshow(ndarray) 将输入数组显示为彩色 ( RGB ) 图像时。 …

转一篇写的比较好的camera文档[Camera 图像处理原理分析]

色彩篇&#xff08;一&#xff09; 1 前言 做为拍照手机的核心模块之一&#xff0c;camera sensor效果的调整&#xff0c;涉及到众多的参数&#xff0c;如果对基本的光学原理及sensor软/硬件对图像处理的原理能有深入的理解和把握的话&#xff0c;对我们的工作将会起…

python导出项目所依赖的所有的库文件以及安装

python项目包的导入和导出 1、导出 pip freeze > filename.txt # filename.txt 可随意命名 # 同时filename.txt 文件中可自定义编辑&#xff0c;也是能够进行包的批量安装。 2、导入(包的批量安装) pip install -r filename.txt

201521123061 《Java程序设计》第三周学习总结

1. 本章学习总结 2. 书面作业 **Q1.代码阅读 public class Test1 { private int i 1;//这行不能修改 private static int j 2; public static void main(String[] args) {geti();Test1getj(); }public static void geti() {System.out.println(i); }public static void getj(…

自带flash的浏览器_解决Flash插件已被屏蔽的问题(谷歌、火狐、IE、Edge)

病症&#xff0c;浏览器界面中显示 adobe flash player 已被屏蔽&#xff1a;作为产品运营&#xff0c;作为经常必须可能要接触到Flash/Html5视频应用的人来员&#xff1b;作为曾开发过flash产品的我来说&#xff0c;这题&#xff0c;我会。并且&#xff0c;提供三种解决方式。…

android系统开发(六)-HAL层开发基础

Android HAL层&#xff0c;即硬件抽象层&#xff0c;是Google响应厂家“希望不公开源码”的要求推出的新概念 1&#xff0c;源代码和目标位置 源代码&#xff1a; /hardware/libhardware目录,该目录的目录结构如下&#xff1a; /hardware/libhardware/hardware.c编译成libha…

numpy数组中冒号[:,:,0]与[...,0]的区别

先随机产生一个[3,4,5]的numpy数组。则该x维度是3&#xff0c;shape是&#xff08;3,4,5&#xff09;&#xff0c;总共包含60个元素。 x[:,:,0] 意思是对数组x切片&#xff0c;可以想象成一个正方体数据&#xff0c;每次切下一个面的数据。第二维取0则得出来[3,4]大小的数组&am…

苹果忘记开机密码_苹果电脑忘记开机密码快速恢复的方法!

很多用户不经常使用电脑&#xff0c;或者粗心大意忘记自己设置的电脑开机密码&#xff01;&#xff01;&#xff01;这可怎么办呢&#xff1f;今天小编就来和大家分享【Mac电脑忘记开机密码快速恢复的方法教程&#xff01;】有需要的的用户不要错过哦&#xff01;步骤一&#x…

Web框架 Bottle 、Flask 、Tornado

Bottle Flask Tornado Python的WEB框架 Bottle Bottle是一个快速、简洁、轻量级的基于WSIG的微型Web框架&#xff0c;此框架只由一个 .py 文件&#xff0c;除了Python的标准库外&#xff0c;其不依赖任何其他模块。 pip install bottle easy_install bottle apt-get install py…