萧姓皇帝是哪个朝代:c编程规范

来源:百度文库 编辑:偶看新闻 时间:2024/04/23 20:04:46
由 onis_man 于 08-11-03 02:22 发表:

c编程规范(本人的深切体会)

c编程规范(本人的深切体会)

真要说起来,c的功能是非常强大的,可以说,汇编能实现的功能,c都能实现
除了人们正常使用的功能外,还具有如下功能

a.读写寄存器
b.读写端口————因此可直接读写磁盘扇区,当然这会很麻烦,而且在保护模式下,应用
程序好像是无法执行这些指令的(这点本人记得不是很清楚)至于为什么不能执行,
这不是本文要讨论的,有兴趣的同仁可以看一下保护模式的文章,就明白了。
c.直接对内存寻址操做————指针可以实现这个功能,操作所有的内存空间,当然成功与否
就依赖于在什么操作系统下了,实模式下对内存访问没有越界保护,所以你在dos下可以
读写任意地址的内存,这不是本文的重点,在此不详细讨论)
d.嵌入汇编(遇到特别讲效率的代码,嵌入汇编不失为一种好办法)

由于c本身对很多东西都不约束,因此编写c时必须要有一些规范,尤其是指针的使用。
也正因为如此,很多学校在开设第一门编程语言课的时候不开c而开pascal,不过本人还
是认为先学c好。

一。指针的规范
虽然指针提供了一切内存寻址的功能,但是正因为如此,使用的时候一定要小心。
1.指针定义的时候一定要初始化
通常情况下,初始化为NULL。
2.指针使用之前要判断是否为空
3.使用指针指向的内存前要确认该指针指向的内存是可用的
未初始化的指针指向的内存不可用,初始化为NULL的也不可用,或者该指针指向已
定义的变量,或者你为该指针动态分配了内存。
4.为指针动态分配内存后一定要记着释放。
不然这块内存将会丢失,本程序用不到,别的也用不了。
5.释放内存后一定要将该指针置为空。
这是规范,虽然不是必要,但是它可以有效检测你在释放过后还错误的使用该指针。
如果操作值为NULL的指针所指向的内存,目前通常的操作系统都会产生出错(这属
于保护模式的范畴)

二。变量局部化的规范
内存单元本身没有局部全局的区分,一块内存在被分配后均可以使用,但是变量的
概念不同于内存的概念,正常函数内定义的变量均置在栈内(什么是栈,在此不详
细讨论),而什么时候如何为这个变量分配栈的空间,这不是我们要做的事,编译
器帮我们完成了这件事,所以变量的生存期是编译器为了编程的方便所规定出来的
概念,不然一段代码乱糟糟的象汇编一样,做程序员的岂不是大费心力。

软件工程有一项理论,就是紧内聚,松耦合,用于这儿的概念就是变量越局部越好,
最好全局的变量一个都没有,每个函数都只管传入的参数和返回值。当然要是没有任何
全局的信息,对于程序来说,可能还会造成很多不方便,也会导致函数的参数过多。所以
怎么来把握这个度,这个是程序员的经验问题。

基于局部化全局化的概念,变量分为如下三种
1。函数内局部变量:函数内使用
2。文件内局部变量:文件内的所有函数均可使用
3。程序的全局变量:所有本程序的文件均可使用(同上一种比较,只是在头文件中多了
extern的声明)
同样函数也存在这么几种
1。文件内的函数
2。程序的全局函数(同上一种比较,只是在头文件内多了该函数的原型,包含了该头
文件的文件当然就可以使用这个函数乐)

三。项目的规范
要把程序做大,在单个文件内实现是不现实的,必须使用多个文件,然后链接成最终的可
执行程序。
1。每项功能对应一个.c文件,而每个.c文件对应一个同名的.h文件,第二个.c文件想使用
第一个.c文件定义的全局变量,全局函数等,必须包含第一个的.h文件,这是规范,多数人
都是这么做的,当然不这么编也没人拦你,不过这是很多人的经验。
2。防止头文件的重包含
头文件内通常定义一些类型、结构等,如果被包含多次,将会出现类型重复定义的错误,所以
通常使用预编译来避免这一条,形式如下:
#ifndefine _MYPROGRAM_H_
#define _MYPROGRAM_H_
/* you code */
#endif
需要在.h文件头尾加上这么几句话。虽然这个很简单,但是在实际生活中,我经常看到有人不
知道这一点,似乎很多书上也没有提到,所以在这儿说明一下。

四。程序编写的格式规范
这也是很重要的一方面,程序代码的好坏很重要的一方面就是易维护性。所以格式一定要标准,
让人人都能看懂,自己也看得明白。这方面我不多说了,大家在看源代码的过程中很容易就能
学到。


这些都是c的基本规范,很多规范可以不遵从,但是显然遵从了会有很多好处。不管你在什么开发
环境下,我想这些规范都是一个初学者应当遵守的。高手咱规范不了:)。暂时只能想起来这些东西
,以后说不定还会有一些。


此文系本人呕心沥血所做(,为了c的大业),高手看了千万不要扔柿子,有什么不对的告诉我,
我也好有则改之,无则加勉


由 diudiu 于 08-11-03 22:01 发表:

鼓励,支持你。兄弟



谢谢大家对丢丢个人站点的支持:
http://www.diudiu.net

致力于C /C++技术讨论


由 巴豆 于 08-12-03 13:31 发表:

指针,该死的指针,可是不得不学呀




别做程序了,给你们一个赚钱的秘诀,做豆腐,做硬了卖豆腐干,做稀了卖豆腐花,太稀了卖豆浆,豆腐卖不动了放几天卖臭豆腐,还卖不动就放坏了卖腐乳!


由 diudiu 于 08-12-03 14:05 发表:

还可以阿,开始有点麻烦。等入门了,就习惯,喜欢它了。。



谢谢大家对丢丢个人站点的支持:
http://www.diudiu.net

致力于C /C++技术讨论


由 hqwjun 于 08-15-03 18:04 发表:

支持你



拥有你是我最大的幸福


由 homer 于 09-07-03 06:15 发表:

支持一下....

个人认为在指针应用方面我还是比较自觉的。呵呵。

关于重包含的问题还真从来没有注意过。


由 smcree 于 09-22-03 18:59 发表:

支持你


由 sadly 于 09-24-03 16:34 发表:

支持一下~



抢劫中国银行 实现心中理想

QQ:824008 ICQ:2896699 MSN:goodyork@hotmail.com


由 jx123jx123 于 10-08-03 00:34 发表:

支持

写的好

我是从basic转而学c的
对指针的体会最深
干开始学的时候好痛苦
老是用错
现在对了
感觉指针好好用哟



永远的westwood!!!


由 tellmewhy 于 11-16-03 20:51 发表:

我也支持一下,虽然是很旧的帖子了!



There is nothing permanent except change.


由 htll 于 11-30-03 06:55 发表:

指针真是个好东西呀!!


由 wangfeng_1981 于 12-10-03 02:10 发表:

关于 "防止头文件的重包含" 的一点看法!

我觉得 预编译应该包含 头文件,而不是代码!

#ifndefine _HEADERFILE_H_
#define _HEADERFILE_H_

#include("headerfile.h")
....

#endif

如果说得不正确,请指正!



==饥渴稚嫩的脑袋!


由 日出东方XP 于 12-15-03 19:12 发表:

指针----内存地址也。



希望直接打印的,希望打开网页后全屏显示的,希望点了按钮后直接退出浏览器的进来,希望设置客户端分辨率的进来
永远爱你—— 东河头村——生我养我的地方
永远爱你—— 石家庄——我生活的地方
永远爱你—— 河北经贸大学——我成长、我起步的地方


由 onis_man 于 12-28-03 22:42 发表:

Re: 关于 "防止头文件的重包含" 的一点看法!

quote:
最初由 wangfeng_1981 发布
我觉得 预编译应该包含 头文件,而不是代码!

#ifndefine _HEADERFILE_H_
#define _HEADERFILE_H_

#include("headerfile.h")
....

#endif

如果说得不正确,请指正!



不太清楚你说的什么意思,预编译是正式编译之前执行的一次编译,生成目标文件,正式编译对预编译生成的目标文件再次进行编译,通过预编译,不仅可以防止这种重包含问题,而且还可以编写release和debug的不同类的二进制文件,例如
#ifdefine DEBUG
debug code
#endif
这样如果编译release版本,debug code在预编译生成的目标文件里不会有,精简了最终生成的二进制文件的大小。
除此以外,预编译也经常用来进行跨平台程序的编写,例如

#ifdefine _IA64_
intel 64位平台下运行的代码
#endif

#ifdefine _BSD_
unix BSD系统下运行的代码
#endif


由 plusKid 于 03-16-04 22:33 发表:

hehe!