馨荣家园

室主感言:可以走错路,不可不走路,也不可总踩别人脚印走路。

  VC知识库BLOG :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 登录 ::
  51 随笔 :: 5 文章 :: 525 评论 :: 3 Trackbacks
<2004年5月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

News

阿荣陋室更名为馨荣家园,寓指温馨和繁荣。

留言簿(196)

随笔分类

随笔档案

文章分类

文章档案

相册

友情链接

搜索

最新评论

阅读排行榜

评论排行榜

CALLBACK宏的误解

CALLBACK宏从字面看起来是“回调”的意思,似乎只要是回调函数就应该有此修饰。其实回调函数并不一定有此修饰。这个修饰的意思是被修饰函数采用__stdcall调用约定,出现这个宏的原因是:微软中大部分回调函数都采用stdcall调用约定(大概是为了适应除了C语言编程之外的其他编程语言吧),而对于用户设计的回调函数,是否有必要采用stdcall调用约定完全依照使用者的习惯和设计上下文。

进制

在刚开始学习计算机原理时,大家接触了数的进制问题。一些人以为内存中数也有二进制、8进制和16进制之分。其实对于计算机而言,他只能利用一些电子开关来保存数字(甚至所有东西都是电子开关保存的),这些电子开关只有开和关两种状态,多个电子开关构成一组(一般每组电子开关的个数都是8的倍数),表示一个数。那么在计算机内部要说一定有进制,就只有一种2进制。实际上,进制只是人类在书面表示数和计算的一种方式,计算机采用的是逻辑电路实现的,其原理完全不同,因此只有给人看(格式化输出和格式化输入)时才存在数制,而计算机内部是没有进制的区别的,16进制的12和10进制的18以及8进制的22对于计算机而言都是一样的,就是8个电子开关分别处于关关开关关关开关状态。

文本文件和二进制文件的误解

看到文本文件和二进制文件,很多人都以为他们在存储格式、内容上都是截然不同的。有人认为文本文件就是用notepad打开就可以看的文本,而二进制文件则是不可读的;还有人认为二进制文件就是以二进制格式存储的文件,这又和数和数的表示挂钩了。

首先从存储格式上,二者没有什么不同,二进制文件和文本文件都是以一种平铺的字节数组的方式存放数据,其中和数的进制中的二进制甚至完全没有关系。

其次从内容上,一般文本文件比较特殊,是可阅读的,但是从理论上而言,文本文件可以是二进制文件的一个特例,也就是特殊的二进制文件也是可读的。

那么文本文件和二进制文件到底有何区别哪?其实很简单,他们只有在文件读写时有些差别。当往文件中写数据时,对于文本方式打开的文件,系统会自动的把连续的0A字符改成0D0A两个字符,对于二进制方式打开的文件则不进行转换。读的时候相反,对于文本文件,自动把0D0A转换为0A,对于二进制文件则不转换。

\和\\的误解

字符是计算机程序设计中常见的数据类型,计算机本身并不认识什么是字符,字符是编程的人对他的理解,也是计算机编程语言的一种语义。计算机用一系列数字表示字符,例如字符'0'在计算机中就是用数字48来表示的。

在输入编程代码时,大部分字符都是可以直接用键盘输入的,但是一些特殊的被称为“不可见”字符的字符则无法输入。例如表示换行的字符就无法用键盘输入,在代码中也无法直接用一个简单的字符来表示它。为此,程序设计语言提供一种转义字符的机制,把一些不可见字符用可见字符的序列表示。在C语言中,转义字符就是反斜杠。

对于不可见字符,C语言提供了两种转义方式,一种是数字转义法,也就是反斜杠后面紧跟一组数字,紧跟的数字就是计算机内部表示那个不可见字符的值。例如换行符在计算机内存中表示为数字10,那么在C语言中就可以用\xA或者\012表示(注意,只能用16进制或者8进制,16进制有x前缀,8进制则用0前缀)。另外一种是在反斜杠后面紧跟一个特殊的字符来表示,下面就是这些转义序列的含义:

转义序列 代表字符 计算机内部值
\a 振铃(Bell) 7
\b 退格(BACKSPACE) 8
\f 走纸(FormFeed) 12
\n 换行(NewLine) 10
\r 回车(Carriage return) 13
\t 水平制表符(TAB) 9
\v 垂直制表符 11
\' 单引号 39
\“ 双引号 34
\\ 反斜杠 92
\? 同问号 63
\a 振铃(Bell) 7

?

这里有几个特别的转义字符,一个是\?,明明这是个可输入字符,偏要弄个转义,不知道为什么。还有\\,由于单个反斜杠已经表示转义字符序列开始了,为了表示反斜杠本身,不得不用两个来表示。还有一个,在C语言编码时,如果行末是一个\,也是一个转义,表示续行。除了上面列出的,其他所有以反斜杠开头的字符,都会出现一个编译时告警。

最近观察,初学者容易犯错的是把这个转义字符序列当成是运行时的东西了。要知道,这个转义只在编写代码时有效,在运行时、内存中和文件内都不存在转义字符。因此在表示目录时:在运行时只有“C:\windows”,不需要“C:\\windows”,而在编码时则必须用“C:\\windows”,不能用“C:\windows”。同样,也不存在把“C:\windows”转换为“C:\\windows”的问题,如果有人问怎么转换,一般都是理解错误。

posted on 2004-05-26 09:24 阿荣陋室 阅读(21250) 评论(128)  编辑 收藏

评论

# re: 程序设计中的一些误解(此帖不断更新,想起什么加什么5月27日更新) 2004-06-03 23:26 Janson_mgd
写得不错

# \?是为了避免三字母的转义序列,这是c代码集的超集 2004-06-05 06:57 jozu
比如??<转义后变成{

# re: 程序设计中的一些误解(此帖不断更新,想起什么加什么5月27日更新) 2004-06-12 21:02 Alex
文本文件的说法似乎有误,尤其在unix和windows上的处理是不同的。

# 其实仅仅是为了强调一个东西 2004-06-18 22:00 阿荣
就是从内容上讲,文本文件和二进制文件没有什么差别,只是读写操作上有所不同。

# re: 程序设计中的一些误解(此帖不断更新,想起什么加什么5月27日更新) 2009-05-17 05:44 fdg


[URL=http://www.xinxinjx.com/en/products.asp]flexographic printing machine[/URL][URL=http://www.chinalisheng.cn">http://www.chinalisheng.cn]给袋式包装机[/URL][URL=http://www.chinalisheng.cn">http://www.chinalisheng.cn]立升机械[/URL][url=http://www.hengtongchina.com/news.asp">http://www.hengtongchina.com/news.asp">http://www.hengtongchina.com/news.asp">http://www.hengtongchina.com/news.asp]手挽袋机[/url][url=http://www.hengtongchina.com/news.asp">http://www.hengtongchina.com/news.asp">http://www.hengtongchina.com/news.asp">http://www.hengtongchina.com/news.asp]手挽袋成型机[/url][url=http://www.hengtongchina.com/news.asp">http://www.hengtongchina.com/news.asp">http://www.hengtongchina.com/news.asp">http://www.hengtongchina.com/news.asp]手挽袋糊底机[/url][url=http://www.cnxinda.cn/english/index1.asp">http://www.cnxinda.cn/english/index1.asp">http://www.cnxinda.cn/english/index1.asp">http://www.cnxinda.cn/english/index1.asp]non woven bag making[/url][url=http://www.cnxinda.cn/english/index1.asp">http://www.cnxinda.cn/english/index1.asp">http://www.cnxinda.cn/english/index1.asp">http://www.cnxinda.cn/english/index1.asp]non woven bag making machinery[/url][url=http://www.cnxinda.cn/english/index1.asp">http://www.cnxinda.cn/english/index1.asp">http://www.cnxinda.cn/english/index1.asp">http://www.cnxinda.cn/english/index1.asp]non woven bag making machine[/url][url=http://www.cnxinda.cn/intro.asp">http://www.cnxinda.cn/intro.asp]横切机[/url][url=http://www.cnxinda.cn/intro.asp">http://www.cnxinda.cn/intro.asp]封切机[/url]

标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]