大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C++技巧 > 编程及C/C++初学者常见问题(FAQ)

编程及C/C++初学者常见问题(FAQ)(10)

关键词:编程C/C++初学者FAQ常见问题  阅读(5247) 赞(32)

[摘要]本文意在集中解决新手学习C/C++语言时将遭遇到的各类问题,本文主要分析概念原理和解决方案,不讨论具体程序语法,立足于让初学者能运行起第一个程序。其他事宜如解释入门语法等本文基本不涉及。
是的,我刚刚说过,程序其实是电脉冲形式的指令的集合。对机器这是绝对正确的。但你认为人类可以直接操作电脉冲么,当然不能。所以最早的时候,程序员们是通过反复的拨动开关或者插拔插头来做这件事的,就像老电影里的电话接线员和发报员。后来技术进化了,人们可以把脉冲信号设置在打了孔的纸带上,然后让纸带穿过有灯管的感应器,有孔电路就通,没有就是断,由纸带机实现了在电脉冲和纸带之间转换。老电影里的工程师们经常拿起一条长长的纸带来阅读。真是高深莫测啊。不过即使这样,要理解程序还是很困难,更别说阅读编写和修改了,人毕竟不是机器。其实人们最习惯用来表达思想的方法是文字,于是人们设想能否直接写出文字形式的程序。通过不懈的工作,这个目标实现了。今天人们可以写出文本形式的称为源代码的程序,然后再利用特定的工具把代码转换成机器能理解的电脉冲形式,也就是目标程序。这种转换工具就叫做编译器,作用相当于翻译,以前是纯粹的机电设备,到了现代他也成了程序的一种。

   从某个角度来说,其实没有任何人能被称为程序员,编译器才是真正的程序制造者。人所制造的只是源代码。从这个角度往下想的话,其实是程序在制造程序,换言之,程序在借助人类之手自我进化。

   在这里顺便讲解下编译和解释的差别。编译器的工作本质上类同于翻译,而我们知道其实翻译有口译和笔译两种工作模式。程序员写完所有的源代码,由编译器一次性转为可执行文件留待以后执行,这种类似笔译的模式我们称为编译。程序员每次输入一行或数行代码,编译器马上把他转换并执行,并等待程序员的后续输入,这种类似即时口译的方式就称为解释,此时编译器就被叫作解释器。C/C++ pascal等语言是编译型的,perl python等语言就是解释型的,java语言很特殊,他先编译成一种中间代码,然后在不同的机器上边解释边执行,这样就能实现跨平台运行,成为半编译模式。微软的.net也是这种机理。现代的新型解释性语言很多都是半编译的,兼顾了运行效率和跨平台性。一般来说,编译型要比解释型的运行效率高些,因为不需要等待程序员的输入,也便于系统优化,但解释型在编程的时候容易排错,界面友好,而且通常程序编写比较方便。不管用哪种语言编程,你总需要一个编译/解释器。

   现代的编译器,往往不止是编译器,他还会包含有着色和搜索等功能的代码编辑器,支持单步调试并行调试的调试器,能够读入文件的多个版本并进行比较分析的版本控制,编辑图标等的资源编辑器,在大型项目中用于统一协调的项目管理,和用于自动化代码生成的向导工具等等。这样的编译器,我们就称它为集成开发环境(IDE : Integrated development environment ),最著名的代表就是微软的VisualStudio系列。

给我解释下啥叫编程语言————各路江湖武功

   菜谱、仪器的操作说明可以用法语来写、也可以用中文来写,不影响实质效果。因为人类生存在同一个四维物理时空中,具有相同或类似的感知。虽然人类的语言五花八门,但都可以通过翻译得到正解。仪器操作说明、一般的菜谱,所描述的都是人类世界的事物,人类可以理解,因此它们可以用人类的语言来描述。但计算机程序显然与菜谱有不同,他是指挥计算机用的。首先CPU所能感受到的物理空间和与人类的感受严重不同,很多概念根本无法传达,其次没有大脑的计算机并不懂得人类的语言,何况人类的语言并不那么完美,很多事不能精确的描述,所以人类的语言不论英语还是中文都不能胜任这个任务。这个情况和音乐有点类似,解决方案是发明一种人造语言专门用于这个领域。比如五线谱就是一种专门的供音乐使用的人造语言(简谱也是,不过那是国人的自创,有点地方话的味道)。于是就有一些专门的纯粹用于计算机的语言被创造出来。

   其中最早的一种基于电路原理,直接用0和1来表示电路的开关通断,不断的拨动开关,就形成了程序。这种语言就是机器语言,它可以直接被计算机听懂,但遗憾的是,人类虽然可以看懂这种语言,但它不符合我们通常的交流习惯,很难被人所阅读,更不要说修改了。

   后来人们提出这样一个方案,我们可以先按某种方法和规则,生成一个我们能看懂的指令序列(就是源代码),再通过某个转化的工具(就是编译器),把它变成机器可以运行的指令(也就是可执行程序)。这个我们能看懂的指令序列的规则的总和(也就是词汇和语法),就是我们通常说的计算机语言,为了和机器语言相区别,被称为高级语言。相应的规则,被称为语法。由于语法和词汇的不同,常见的语言有很多种,本文将介绍的就是C/C++语言,其他著名语言有BASIC、Pascal、JAVA、COBOL、 Python、汇编等等,他们各有所长,在不同的领域发挥着作用。但由于计算机的体系结构大致相同,这些语言也大同小异,具有共通之处。这情况很好理解,通常真实世界的拳法看起来都有点相似,只有漫画这类幻想作品里才会有手脚飞出或者口吐火焰眼下喷水这种怪异的事情发生。这个编程语言的共通之处也就是我前面讲过的算法和数据结构、平台和库这类东西。由于历史原因,大部分计算机语言借用了部分英语的词汇作为基本词汇,但绝不是说必须先学英语才能学习编程。如果只因为那几个屈指可数的英文单词而放弃学习编程,我只能说这样的人乘早离开为好。

   顺便提一句,本文作者(也就是我),一向认为那个叫易语言的中文编程语言是个不折不扣的笑话。理由很简单,其他流行的语言都有自己的独到之处,就像武当剑少林拳打狗棒一样在江湖上占有一席之地,而这个语言除了有几个中文标识符之外,一无所长。而这几个中文标识符也不过是使用了文本替换的方式把C语言的几个特定词汇换成了意思相对应的中文而已。任何一个文本编辑器都可以做到这一点。形象的表现一下,这就是有个猥琐的家伙特地身穿全套阿拉伯长袍练了整路正宗少林长拳然后大声叫嚷这就是他发明的具有民族特色的中东石油大亨拳。

语言之后要确定的事情------操作系统和平台

   在众多的程序里,有一大类特殊的程序,他们就叫操作系统。操作系统是最基础的程序,他让计算机运行起来,所有的硬件都做好准备,接受别的程序给予的指令。相对的,其他程序就叫应用程序。操作系统和应用程序的关系,就象人的基本意识和数学水平一样。想让一个连基本意识都没了的人(植物人)参加数学高考,看来你和我都疯了。一般的计算机都是硬件、操作系统和应用程序相互分离的,需要的时候分别安装。有些特殊的设备直接把操作系统做在硬件里,比如各种电子游戏机,可以开机,但是要有游戏光盘或游戏卡才能玩,还有些计算机把操作系统和应用程序都做在一起,放在机器内部,前几年很流行的俄罗斯方块掌上游戏机和电子宠物就是这样的设备。但总体而言,没有操作系统的计算机,就像没有灵魂的身体,是无法动弹的。这种情形,回想一下你那只进了水彻底完蛋了的手机就明白了。

   编写操作系统要比通常想象的困难的多,它涉及到大量的背景知识和底层操作。所有连本篇FAQ都还不能消化的新学者应该完全打消诸如自己制作操作系统的念头,有实力之后再来尝试也不迟。

   提供给钢琴和手风琴的乐谱并不是完全一样的,这是一种共识。为什么,因为这是两种不同的乐器。同样,在这个世界上有很多种的计算机,他们相互之间的差别也很大。每一种计算机都需要操作系统,而某一款计算机可能有好几种操作系统可以使用,就象黄种人可以说中文,也可以说日语。特定的计算机和特定的操作系统的组合,就被称为平台。就像钢琴曲不是给京韵大鼓使用的,对印度土著说中国成语也不会有什么好效果,编程通常都要针对某种平台来做。有一些高级语言号称能够跨平台,也就是可以在很多平台上运行,但作者认为那样多少会有性能上的损失或者意想不到的问题出现,所谓有得必有失就是这个了。

   就像我在前面谈到库的时候已经提到过,如果你想要在编程上面有所成就,你不得不选定一个平台深入地钻研。个人认为,初学者不适宜同时在两个完全性质不同的平台上学习,不同的特性绝对会把你搞晕,在你确认掌握了一个之后再学习另一个,相互借鉴的作用才能体现出来。

编程时什么东西最重要----源代码

   按照一般编程语言的规则编写的程序通常都是文字形式的,虽然还不能直接执行,但可以转换成可执行的程序,它是真正程序的源头,于是被称为源代码。编程的主要工作就是在制造源代码。由于源代码几乎人人都能看懂,而源代码又可以生成真正的程序,所以取得了源代码,就相当于取得了程序的一切,包括程序本身和程序背后的思想。基于此,大型软件公司要把他们的源代码严密的保护起来,而开源组织的第一条规则就是开放源代码。而作为初学者的你,请妥善保管你所写下的每一段源代码,这都是你积累的财富。

我的程序和一般的程序不一样,什么原因----控制台和图形界面

   



相关评论