编程语言风格概述(下)



七、指针

  杜绝野指针

“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。

“野指针”的成因主要有两种:

(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如

char *p = NULL;

char *str = (char *)malloc(100);

(2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。参见7.5节。

(3)指针操作超越了变量的作用范围。这种情况让人防不胜防,示例程序如下:

class A

{

public:

void Func(void){cout << “Func of class A” << endl; }

};

void Test(void)

{

A *p;

{

A a;

p = &a;// 注意 a
的生命期

}

p->Func();        
// p是“野指针”

}

函数Test在执行语句p->Func()时,对象a已经消失,而p是指向a的,所以p就成了“野指针”。但奇怪的是我运行这个程序时居然没有出错,这可能与编译器有关。

八、注释

1、段注释/*…*/,行注释//,及文档注释/**…*/

注释一般应用于:

(1)版本、版权声明;

(2)函数接口说明;

(3)重要的代码行或段落提示。

虽然注释有助于理解代码,但注意不可过多地使用注释。注释的数量一般应为代码的三分之一为宜。

2、“零”值的判断

布尔类型变量应用true和false表示,而不应用1或0,在C语言中,C99版本以前true和false不能识别,但C99后加入<stdbool.h>这个头文件,即可使用true和false。

bool类型变量的判断形式

if (flag )

if ( !flag )

指针类型变量的判断形式

if(p == NULL)

if (p != NULL)

3、端口的开闭

端口的开闭要遵循哪里开哪里关的原则,否则就会造成资源的占用与浪费。虽然在实际开发中很难做到完全的开关对应,这也是内存泄漏的主要原因,但要尽可能地将使用完毕的资源释放掉,以确保资源的最大化利用。

参考资料:

  
《高质量C/C++编程》 
林锐  2001

  
《十大编程恶习》

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-15 14:56:52

编程语言风格概述(下)的相关文章

编程语言风格概述(上)

刚开始学习编程时,查找了很多资料,希望自己能够规范编程,养成一个良好的习惯,而事实证明这也是很有必要的.这篇文章是我大一的时候写的,比较粗浅,难免会有不足之处,还望批评指正. 编程语言风格概述 摘要: 很多人在学习编程时不注意编程语言的风格,以为能够通过编译就万事大吉了.这样做的危害是巨大的,导致在以后的工作和学习中难以与别人交流与合作.而在大学教育中,也很少会注意到编程风格规范问题,留下的问题难以弥补与改正. 在业界中,每个公司都有各自的规范,以致很难形成统一的风格规范,也的确没有统一的风格规

编程语言风格概述(中)

 四.对齐 代码的合理对齐能够使得代码更加清晰易读,在调试时能够更容易发现错误. C语言的风格是程序的分界符'{'和'}'应独占一行并且位于同一列,同时与引用它们的语句左对齐. Java的风格是程序的分界符左右大括号'{''}'不必左对齐,而是 public static void main(String[] args){ --. --. } {}之内的代码块在'{'右边一Tab缩进处左对齐.应注意,代码的缩进都应作用Tab键缩进,而不能使用空格键缩进. 示例2-4(a)C语言风格的对齐,示

camel-name-utils 在驼峰风格跟下划线风格之间切换

用处 用来将字符串在驼峰风格跟下划线风格之间切换.对于一般人可能没用,对于写orm框架的人有点作用. 例子: company_name -> companyName 安装方式 添加以下依赖到pom.xml <dependency> <groupId>org.crazycake</groupId> <artifactId>camel-name-utils</artifactId> <version>1.0.0-RELEASE<

RESTful 架构风格概述

Outline 1. RESTful架构风格 1.1 RESTful架构风格的特点 1.1.1 资源 1.1.2 统一接口 1.1.3 URI 1.1.4 无状态 1.2 ROA.SOA.REST与RPC 1.3 本真REST与hybrid风格 2. 认证机制 2.1 Basic Auth 2.2 Token Auth 2.3 OAuth 3. 总结 1. RESTful架构风格 RESTful架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学

计算机概述下

承接上篇博客,这次主要讲的是计算机概述下半部分.4 时延指的是数据从网络的一端传送到另一端所需要的时间4.1 发送时延发送时延是主机或路由器发送数据帧所需要的时间.发送时延=数据帧长度/发送速率4.2 传播时延指电磁波在信道中国传播一定的距离需要花费的时间.4.3 处理时延主机或路由器在分组时要花费一定的时间处理.如提取首部,差错检验等.4.4 排队时延分组在经过网络传输是要经过许多的路由器,但分组在进入路由器后要先在输入队列里中等待排队处理.在路由器确定了转发接口后,还要在输出队列中排队等待转

驼峰风格、下划线风格互转

1 /** 2 * 将驼峰式命名的字符串转换为下划线大写方式.如果转换前的驼峰式命名的字符串为空,则返回空字符串.</br> 3 * 例如:HelloWorld->HELLO_WORLD 4 * @param name 转换前的驼峰式命名的字符串 5 * @return 转换后下划线大写方式命名的字符串 6 */ 7 public static String underscoreName(String name) { 8 StringBuilder result = new String

Windows活动目录系列---分布式活动目录部署概述(下)

本地ADDS部署与云服务集成: 目前可以通过两种方法来将ADDS扩展到云上.一种是通过Windows Azure AD,另一种是在Windows Azure虚拟机上安装Windows 2012R2的服务器,然后将服务器提升为DC. 什么是Windows Azure AD? Windows Azure AD是一个基于Windows Azure的服务,它被用来给云上的应用程序提供ID管理和访问控制.通常在订阅了office365,Exchange Online,SharePoint Online,L

&lt;script type=&quot;text/template&quot;&gt;是干什么的,为什么要把html写在js中? 这是什么编程语言风格,都能这样用吗?

这一段存放了一个模板.在js里面,经常需要使用js往页面中插入html内容.比如这样: var number = 123; $('#d').append('<div class="t">'+number+'</div>') 如果html很短还好说,但是遇到描述里面的这么大段,直接用字符串存储会很困难,因为不光要处理单引号,还需要很多「+」号把字符串一个个连接起来,十分的不方便.给<script>设置type="text/template&q

Java类编译后Class文件概述(下)

具体的实例 Java文件 package com.weixuan.test; public class MyTest { private int age; private String name; public int getAge() { return age; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public void setName(String