主题:C源文件在计算机内的存储形式

主题:C源文件在计算机内的存储形式

作者:毛毛

内容:

我觉得计算机科学实际就是一门应用科学,它的存在就是为了帮助人们更好的处理生活、学习和工作中的问题。因为我们国家引进这门科学的年代比西方国家晚一些,虽然现在几乎人人家里都有电脑,但是依然有太多人的心中对它充满了神秘感。尤其是“黑客”这一外来词,更加给它蒙上了一层迷雾。

昨晚,我们的QQ学习群里一位叫printf的大佬,发了一篇新闻,新闻中说到,号称中国最年轻的“黑客教父”,被广州警察给抓住了。这篇文章的大概内容是说,这个所谓“黑客教父”的年轻人,在网络上发布经过包装的自己的新闻、信息,黑客教学资料等,来吸引我们未知的年轻人,让他们花高价充值会员或购买黑客教学光盘等。看过这篇新闻的我,不尽感叹,“黑客”一词着实害了我们一大批年轻无知的人。其实,在我没有学习计算机专业前,也跟这些无知的人一样,对“黑客”一词也充满了无限的幻想……

说了这么多可能无聊的话,但是我依然想对大家说:学习计算机编程,不要在一开始就误入歧途。因为真正的黑客要精通多门计算机基础学科,不是会简单地使用一些后门软件就是所谓的黑客啦。我们在学习之初,一定要对自己和计算机有一个充分的、清楚的认识,因为你要记住的是,在计算机安全技术如此成熟的今天,那名“真正的黑客”一定不是你!

哈哈,一下子说了这么多。现在进入我们今天的学习内容吧!

在我们生活的世界中,所有的东西都可以抽象为数据。举个“栗子“:例如我们常常会用电脑写一些东西,不管你写的是什么,它在计算机中的存储形式是“位+上下文”的字符序列。我们先不管这个“上下文”是什么,我先说这个“位”与“字节”。“位”是计算机内所表示的最小的存储单位,每8位是一个“字节”。如下图:

我想说的是,从我们学习C语言开始,就要对数据一词有一定高度的认知。可以这样认为:数据 = 空间+数值。也就是说,我们眼中的数据,在计算机中不仅仅只有值,而且这个值有对应的存储空间。而对C语言中存在的各种数据类型我就不说了,相关知识自己看我们的大学课本吧(例如:潭浩强所著《C程序设计》)。

好啦,打开我们的虚拟机进入Linux系统,并用下面的方式组织我们的C语言源代码文件吧:

知识扩展:为什么要这样组织我们的文件目录呢?我只能说在工程项目开发中,已经快成为不成文的“规定”啦。管他呢,我们只要一开始就这样写就对了。下面对上图中所看到的内容做一下解释:

【mao@192~】$ --- 命令行提示符;其中~号代表当前工作目录,$代表当前用户mao为普通用户。

mkdir --- 创建目录;后面的mao_test1为将要创建目录的名字。

ls --- 显示当前目录中的内容。

cd --- 切换到…目录;上图中为切换到刚刚创建好的mao_test1目录中。

mkdir inc src obj bin --- 同时创建多个目录,结果如图所示。

其中:

inc 代表存储头文件的目录; src 代表存储源代码文件的目录; obj 代表存储目标代码文件的目录; 而bin 用来存储可执行文件的目录。

最后将我们的工作目录切换到src目录下,并在这个目录中,准备写下我们的第一个小程序。Linux系统中,文件的名字是区分大小写的!如文件Mao与文件mao是两个不同的文件。它本身自带了vi文本编辑器,为了我们方便,可以现在就安装一下vim,它是vi的升级版本,大多数开发人员使用的就是它了。如下图,输入命令 $ sodu yum install vim -y回车后,输入之前第一次进入系统时设置的mao用户密码,就会看到图中的安装内容了,其中-y是默认“确认”选项。

当然,我的已经安装好啦!一本Linux C高级编程书中说过,对于初学者不推荐使用vim。因为它对于初学者来说,的确有点不容易上手,但我还是建议自己抽时间将它的基本用法学会吧,早点接触,早点受益嘛。在本篇笔记中,我只简单说明几个vim的操作命令。更多相关vim使用的知识,自己查询网络资源或书籍吧。当然,也可以继续关注我们的“不懂代码的小王国”微信公众号,后续我会再写一些有关vim的使用方法,同大家一起学习。现在在我们的src目录,输入下面的命令,创建第一个hello.c的源文件:

$vim hello.c --- 使用vim文本编辑器,创建名为hello.c的源文件。

当弹出vim的文本编辑器的窗口后,会在屏幕左下角看到hello.c文件的名称。此时,按下组合键 “Shift + : ” 在屏幕的左下方会看到一个:冒号的提示符,并输入set nu ---设置行号;接着继续按下上面的组合键,并输入set cindent shiftwidth=4 ---设置文本按C语言缩进为4个空格。接着,按下键盘中的字母i, 进入输入vim编辑的插入(屏幕左下角会看到INSERT字样)模式,此时便可以输入文本了。如下图所示,我们写下第一个hello.c文件的内容:

下面我们看一下这个所谓的源文件在计算机中是以什么样的形式存储的吧,编辑好后,按一下键盘左上角的ESC键,然后再按下上面提到的组合键Shift + : 输入wq 保存并退出。在命令行中输入下面的命令,如图:

file命令用来查看文件的属性的命令之一,我们可以看到在输出的结果中,清楚的写到:hello.c文件为C语言source文件,采用的字符集是UTF-8 text 纯文本文件。一定要记得,其实我们所写的C代码,其实就是纯文本文件而已!我们可以输入man ascii命令,找到与hello.c文件内容中所有对应的ASCII字符集中对应的10进制表示。如下图:

$man ascii

此时,按下键盘中的字母j(逐行),或Page Down(逐页)向下查看一下,会找到如下图所示内容:

这个就是我们的代码中第一行第一个字符#对应的10进制了,代码中的其它内容依次类推。再看下面的截图,来源于《深入理解计算机系统》经典书籍:

更多详情,可以参考一下这本书。

知识扩展:不要简单的认为char类型在所有计算机中都表示为一个字节。一般情况下,开发软件都是团队合作的形式,而每个团队都有自己的一套标识符的命名方法。而且我们可以首先养成一种习惯,那就是在写代码前,将我们的C语言中的数据类型进行重定义(typedef)为我们开发所使用的机器类型(企业开发中就是这样做的),以避免出错!比如,我们可以写一个头文件,把重定义的数据类型包含在这个头文件中,并在后面的源代码的中包含这个类型重定义的头文件即可。

待续。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181215G19G9T00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券