c语言局限性,C语言陷阱与缺陷.pdf

C 语言陷阱和缺陷[1]

winxos 11-01-28

winxos 11-01-28

原著:Andrew Koenig - AT&T Bell Laboratories Murray Hill, New Jersey 07094

原文:收藏

翻译:lover_P

[译序]

那些自认为已经“学完”C 语言的人,请你们仔细读阅读这篇文章吧。路还长,很多东西要学。我

也是„„

[概述]

C 语言像一把雕刻刀,锋利,并且在技师手中非常有用。和任何锋利的工具一样,C 会伤到那些不

能掌握它的人。本文介绍C 语言伤害粗心的人的方法,以及如何避免伤害。

[内容]

 0 简介

 1 词法缺陷

o 1.1 = 不是 ==

o 1.2 & 和 | 不是 && 和 ||

o 1.3 多字符记号

o 1.4 例外

o 1.5 字符串和字符

 2 句法缺陷

o 2.1 理解声明

o 2.2 运算符并不总是具有你所想象的优先级

o 2.3 看看这些分号!

o 2.4 switch语句

o 2.5 函数调用

o 2.6 悬挂else 问题

 3 链接

o 3.1 你必须自己检查外部类型

 4 语义缺陷

o 4.1 表达式求值顺序

o 4.2 &&、||和!运算符

o 4.3 下标从零开始

o 4.4 C 并不总是转换实参

o 4.5 指针不是数组

o 4.6 避免提喻法

o 4.7 空指针不是空字符串

o 4.8 整数溢出

o 4.9 移位运算符

 5 库函数

o 5.1 getc()返回整数

o 5.2 缓冲输出和内存分配

 6 预处理器

o 6.1 宏不是函数

o 6.2 宏不是类型定义

 7 可移植性缺陷

o 7.1 一个名字中都有什么?

o 7.2 一个整数有多大?

o 7.3 字符是带符号的还是无符号的?

o 7.4 右移位是带符号的还是无符号的?

o 7.5 除法如何舍入?

o 7.6 一个随机数有多大?

o 7.7 大小写转换

o 7.8 先释放,再重新分配

o 7.9 可移植性问题的一个实例

 8 这里是空闲空间

 参考

 脚注

0 简介

C 语言及其典型实现被设计为能被专家们容易地使用。这门语言简洁并附有表达力。但有一些限制

可以保护那些浮躁的人。一个浮躁的人可以从这些条款中获得一些帮助。

在本文中,我们将会看一看这些未可知的益处。这是由于它的未可知,我们无法为其进行完全的分

类。不过,我们仍然通过研究为了一个C 程序的运行所需要做的事来做到这些。我们假设读者对C 语言至

少有个粗浅的了解。

第一部分研究了当程序被划分为记号时会发生的问题。第二部分继续研究了当程序

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

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

相关文章

[随记][asp.net基础]Page_Load和OnLoad

标题:[随记][asp.net基础]Page_Load和OnLoad 一、前言 东西好久不用、不想,就会忘,所以没办法,只好记下来。 二、正文 aspx页面加载的时候会自动执行Page_Load,也会执行OnLoad方法,这两个是什么关系呢&…

POLLERR的故事

今天code review时,同事B对我代码中的poll()的处理做法提出了异议。于是做了些研究,还发现了一些好玩的故事。 异议的代码 我的代码是参考manpage写的,类似下面的做法。同事B说没有处理POLLERR、而且应当使用else if。 OK。我赞同补充POLLERR…

c语言内循环,C语言循环控制语句

C语言循环控制语句是一个基于C语言的编程语句,该语句主要有while循环语句、do-while循环语句和for循环语句来实现循环结构。中文名C语言循环控制语句类 别while循环语句,do-while语句等目 地实现循环结构属 于计算机领域归 类编程语句基 …

同步,异步,多线程,你怎么看?

同步,异步,多线程,你怎么看? 原文:同步,异步,多线程,你怎么看?[原创]讲解同步与异步的帖子多如牛毛,个人的理解,简单地说同步就是串行,异步就是并…

openssl-1.0.0b - libssl 移植到ARM Linux

开发环境: ubuntu 10.04 arm-linux-gcc version 4.4.1 目标环境 友善之臂mini6410 linux-2.6.36 移植步骤 1.至官网下载最新的openssl,解压缩 2.cd进入openssl-1.0.0b目录 3.执行./Confiugre linux-elf-arm&#xff0c…

C语言的putpiel函数,C语言graphics.h函数介绍

可编辑(一) 像素函数56. putpiel() 画像素点函数57. getpixel()返回像素色函数(二) 直线和线型函数58. line() 画线函数59. lineto() 画线函数60. linerel() 相对画线函数61. setlinestyle() 设置线型函数62. getlinesettings() 获取线型设置函数63. setwritemode() 设置画线模…

ARM-Linux下交叉编译opessl-1.0.0

本次任务是要完成嵌入式Linux下对openssl程序的支持。 我的开发环境:ARM9开发板 和 嵌入式Linux操作系统。装有Linux系统(我的是ubuntu9.04)的PC机一台。串口和串口连接线。串口调试软件:minicom。交叉编译工具:arm-unknown-l…

modf函数C语言,C / C ++中的modf()

该函数modf()用于将传递的参数拆分为整数和小数。在“ math.h”头文件中声明该变量以进行数学计算。它返回传递的参数的分数值。这是modf()C语言的语法,double modf(double value, double *integral_pointer);这里,值-分为整数和分数的值。积分指针-分割…

codeforces #236 div2 简洁题解

A:A. Nutstime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou have a nuts and lots of boxes. The boxes have a wonderful feature: if you put x (x ≥ 0)divisors (the spacial bars that can divide a box) to…

南京大学c语言试卷,2007年4月南京大学C语言期中试题.doc

2007年4月南京大学C语言期中试题南京大学《C语言程序设计》期中试卷(2006年4月15日)系科 学号______________姓名_____________成绩_______________注意事项:1、答案均写在答题纸上,写在卷面上无效;2、答题结束后将试卷及答题纸全部交给监考教师;3、闭卷…

web通信 长连接、长轮询

http://www.cnblogs.com/hoojo/p/longPolling_comet_jquery_iframe_ajax.html转载于:https://www.cnblogs.com/kszit/p/3605340.html

V210 SPI驱动分析

对于总线设备驱动,是需要分别创建设备和驱动两个结构体,然后根据name,互相匹配,匹配成功后,调用 驱动的probe函数,然后创建设备文件,实现驱动的业务逻辑。 因此,我们就以设备和驱动…

android 有值代码,Android:如何在代码中获取“listPreferredItemHeight”属性的值?

这样做:TypedValue value new TypedValue();((Activity)context).getTheme().resolveAttribute(android.R.attr.listPreferredItemHeight, value, true);编辑:由于尚未正确初始化DisplayMetrics实例,因此您将获得零值。它需要一个参考框架(显…

android 多个按钮响应,处理Android Recyclerview中的多个按钮单击并将响应存储在Array或ArrayList中...

我正在设计在线测验App。我设计了PlayQuiz.java文件如下:public class PlayQuiz extends AppCompatActivity {private RecyclerView recyclerView;DataBaseHelper database;private List quizList;private QuizAdapter adapter;Overrideprotected void onCreate(Bun…

密码学中的“盐值 Salt”

盐(Salt) 在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。 以上这句话是维基百科上对于 Salt 的定义,但是仅凭这句话还是…

android 主线程调用,Android 主线程和线程之间相互发送消息

通过分析Activity源码,我们知道每个Activity都有一个Looper,所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop(),但是线程是不带Looper的,当线程要接收来自主线程的消息是就需要调用Looper.prepare()和Looper.l…

10 个十分难得的 javascript 开发经验

Javascript 的很多扩展的特性是的它变得更加的犀利, 同时也给予程序员机会创建更漂亮并且更让用户喜欢的网站。 尽管很多的开发人员都乐于颂扬 javascript,但是仍旧有人看到它的阴暗面。 使用很多 javascript 代码的 web 页面会加载很慢,过多…

简单的UTF8编码生成

用记事本建一个文件,用editplus打开,并转成UTF8格式 然后写中文字符 然后用ultraEdit打开,切换到16机制模式即可

android unzip file,Unzip File in Android Assets

可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):问题:I put a zip file in the android assets. How do i extract the file in the android internal storage? I know how to get the file, but i dont know how t…

Eclipse安装ADT失败解决办法

Eclipse的版本是3.5.2,配置Android的开发环境时遇到问题…… 按照Android官方文档一步步安装,到了安装Eclipse的ADT插件时,提示“requires org.eclipse.gef 0.0.0 but it could not be found” 缺少GEF,Eclipses Graphic Editing …