第一章 预备知识
1.1 C++简介
C++编程语言融合了3种不同的编程方式:C语言代表的过程性语言、面向对象语言、C++模板支持的泛型编程。
1.2 C++简史
C语言
20世纪70年代,贝尔实验室的Dennis Ritchie致力开发UNIX操作系统。传统上,程序员使用汇编语言来满足这些需求。但由于汇编语言是低级(low-level)语言,需要之间操作硬件,比如说访问CPU寄存器和内存单元,,因此汇编语言只能针对特定的计算机处理器。然而,UNIX是为在不用的计算机上工作而设计的,需要使用高级(high-level)语言,致力于解决问题,而不针对特定硬件。一种被称为编译器的特殊程序将高级语言翻译成特定的计算机语言。Ritchie希望有一种能将低级语言的通用性、硬件访问能力和高级语言的通用性、可移植性融合在一起,于是他在旧语言的基础上开发了C语言。
C语言编译原理
C语言在最初面世时也是过程性语言,程序按照一系列特定的流程生成结果。随着程序规模的扩大,程序语言遇到组织混乱的问题,代码难以阅读。为了解决这种问题,于是又开发出了结构化编程(structured programming)。C语言具有这种特性,比如for循环、if else语句等。
另一新原则是自顶向下(top-down)设计。C语言的理念是将大型程序分解成小型的任务,它鼓励使用程序单元(函数)来表示各个模块。综上所述,结构化编程技术反映了过程性编程的思想。
面向对象编程
结构化编程在编写大型程序时仍面临着挑战,因此推出了OOP编程。OOP强调数据,不像过程性编程那样试图使问题满足语言的过程性方法,而是试图让语言来满足问题的要求。其理念是设计与问题的本质特性相对应的数据格式。从低级组织(如类)到高级组织(如程序)的处理过程叫做自下而上(bottom-up)的编程。
C++和泛型编程
泛型编程是C++支持的另一种编程模式。泛型编程对语言进行扩展,以便可以只编写一个泛型函数,即可用于各种实际类型。C++模板提供了完成这种任务的机制。
C++的起源
C++也是在贝尔实验室发明的,Bjarne Stroustrup于20世纪80年代开发出了这种语言。
C++是C语言的超集,任何有效的C程序都是有效的C++程序。
1.3 可移植性和标准
如果在不修改代码的情况下,重新编译程序后,程序良好运行,则该程序是可移植的。(当然,使用不同的操作系统,对程序重新编译都是必须的)。可移植性存在两个方面障碍,一,硬件特性的程序是不可移植的,二,语言标准的差异会使程序不可移植(由此制定了国际标准ANSI/ISO,如C++98,C++03,C++11等)。
1.4 程序创建
运行步骤
- 编写程序,得到源代码
- 编译,将源代码翻译为机器语言
- 链接,将目标代码与其它代码链接起来,最后生成可执行代码
(比如说你在代码中用到标准库,那么在链接阶段就会把标准库的二进制代码与你写的目标代码链接)
创建源代码文件
使用集成开发环境(IDE)并添加源代码文件的扩展名(.cpp等)。
编译和链接
在最初实现C++时,使用了从C++到C的编译器程序,叫cfront。随着C++的普及,才有了将C++源代码直接生成目标代码的编译器。
Linux系统会生成可执行文件a.out,而windows系统会得到可执行文件a.exe。
Windows编译器命令
创建好项目后,需要对程序进行编译和链接。IDE通常提供了多个菜单项,如Compile(编译)、Build(建立)、Make(生成)、Build All(全部建立)、Link(链接)、Execute(执行)、Run(运行)和Debug(调试),不过同一个IDE中,不一定包含所有这些选项。
- Compile通常意味着对当前打开的文件中的代码进行编译。
- Build和Make通常意味着编译项目中所有源代码文件的代码。这通常是一个递增过程,也就是说,如果项目包含3个文件,而只有其中一个文件被修改,则只重新编译该文件。
- Build All通常意味着重新编译所有的源代码文件。
- Link意味着(如前所述)将编译后的源代码与所需的库代码组合起来。
- Run或Execute意味着运行程序。通常,如果您还没有执行前面的步骤,Run将在运行程序之前完成这些步骤。
- Debug意味着以步进方式执行程序。
- 编译器可能让您选择要生成调试版还是发布版。调试版包含额外的代码,这会增大程序、降低执行速度,但可提供详细的调试信息。
1.5 总结
C++是世界上最好的语言
标签:源代码,编程,程序,C++,C语言,编译,Plus,Primer From: https://www.cnblogs.com/vLiion/p/17725157.html