C++ 编程:C++ 代码
代码是计算机用来解释的一系列符号,以执行给定的目标。与自然语言一样,代码是所有控制语言的约定和规则的结果。它允许以标准的、可编译的方式实现项目。编写正确的代码用于创建项目,这些项目充当自然语言的中间体,以表达含义和想法。理论上和实际上,这允许计算机程序解决任何明确定义的问题。
- 未定义行为
同样重要的是要注意,语言标准将某些项目留作未定义。未定义的项目并不局限于 C++ 语言,但如果它们产生不一致的结果,可能会让不知情的初学者感到困惑。这些项目的未定义性质在需要使用多个编译器的跨平台开发中最为明显,因为这些项目的具体实现是每个编译器所做选择的结果。
编程的任务,虽然在执行中并不容易,但在目标上实际上相当简单。程序员会设想或被分配一个特定的目标。目标通常以“我想要一个执行... *填空*...” 的形式提供。然后,程序员的工作就是想出一个“工作模型”(一个模型,可能包含一个或多个 算法)。这个“工作模型”有点像程序将如何实现设定目标的想法。它让程序员对要编写的内容有了概念,以便将想法转化为可运行的程序。
一旦程序员对程序需要采用什么结构才能实现目标有了概念,他们就开始使用选定的 *编程语言 关键字*、*函数* 和 *语法* 实际编写程序本身。他们编写的代码实际上实现了程序,或使其执行必要的任务,因此有时被称为“实现代码”。
重申定义,程序只是一系列以某种编程语言编写的指令,告诉计算机该做什么,以及通常如何做。典型用户在计算机上执行的所有操作都由程序处理和控制。程序可以包含任何内容,从解决数学问题或发送电子邮件的指令,到在视频游戏中角色被射击时的行为方式。计算机将从头到尾逐行执行程序的指令。
如今有各种各样的程序用于各种目的。所有程序都是用某种形式的编程语言编写的,C++ 可用于任何类型的应用程序。不同类型程序(也称为软件)的示例包括
- 操作系统
- 操作系统负责确保计算机上的所有内容都按应有的方式工作。它特别关心确保计算机的“硬件”(即磁盘驱动器、显卡和声卡等)与计算机上的其他程序正确交互。Microsoft Windows 和 Linux 是 PC 操作系统的示例。一个用 C++ 编写的开源操作系统,其源代码可以在网上获得,例如 Genode。
- 办公程序
- 这是一个通用类别,用于收集允许您撰写、查看、打印或以其他方式显示不同类型文档的程序。通常,这样的“套件”包含一个用于撰写信件或报告的文字处理程序、一个电子表格应用程序和一个某种形式的幻灯片演示创建者等等。流行的办公套件示例包括 Microsoft Office 和 Apache OpenOffice,其源代码可以在 OpenOffice.org 上找到。
- 网络浏览器和电子邮件客户端
- 网络浏览器是一个程序,它允许您输入互联网地址,然后为您显示该页面。电子邮件客户端是一个程序,它允许您在网络浏览器之外发送、接收和撰写电子邮件。电子邮件客户端通常也具有一定的网络浏览器功能,而某些网络浏览器则集成了电子邮件客户端。著名的网络浏览器包括 Internet Explorer 和 Firefox,电子邮件客户端包括 Microsoft Outlook 和 Thunderbird。大多数使用 C++ 编程,您可以访问一些作为开源项目,例如 (http://www.mozilla.org/projects/firefox/) 将帮助您下载和编译 Firefox。
- 音频/视频软件
- 这些类型的软件包括媒体播放器、声音录制软件、刻录/翻录软件、DVD 播放器等。许多应用程序,例如 Microsoft 编写的流行媒体播放器 Windows Media Player,都是音频/视频软件的示例。VLC 媒体播放器是一个开源媒体播放器的示例,其源代码可在网上获得。
- 电脑游戏
- 有无数的软件名称,要么是游戏,要么是旨在帮助玩游戏的软件。这个类别非常广泛,无法深入讨论所有不同类型的游戏软件,而不必创建另一本书!游戏是电脑上最受欢迎的活动之一。
网络安全
网络安全软件是现代计算机企业的关键组成部分。软件和编程是允许加密个人、财务和其他重要敏感信息类型的关键组成部分。网络安全软件是保护用户在线生活的重要组成部分。
- 开发软件
- 开发软件是专门用于编程的软件。它包括用于在计算机语言中编写程序的软件(有时与记事本等文本编辑器一样简单)、用于检查代码是否稳定和正确的软件(称为调试器)以及用于将源代码编译成可执行程序的软件(称为编译器)。通常,这三个单独的程序会合并成一个更大的程序,称为 IDE(集成开发环境)。对于所有可以想象的编程语言,都有各种各样的 IDE。Windows 和 Linux 上流行的 C++ IDE 是 Code::Blocks IDE (免费和开源)。您将在本书中了解最多的软件类型是开发软件。
如前所述,程序是用多种不同的语言编写的,对于每种语言,用于告诉计算机执行特定命令的单词和语句都不同。但是,无论使用什么单词和语句,几乎每种编程语言都将包含完成以下任务的语句
- 输入
- 输入是指从键盘或鼠标,有时是从另一个程序获取信息的行为。
- 输出
- 输出与输入相反;它向计算机显示器或其他设备或程序提供信息。
- *数学*/*算法*
- 所有计算机处理器(计算机的大脑)都具有执行基本数学计算的能力,并且每种编程语言都有一些方法可以告诉它这样做。
- 测试
- 测试包括告诉计算机检查某个条件,并在该条件为真或假时执行某些操作。条件语句是编程中最重要 的概念之一,所有语言都有一些测试条件的方法。
- 重复
- 重复执行某些操作,通常带有某种变化。
信不信由你,这就是全部。你用过的所有程序,无论多么复杂,都是由看起来或多或少像这些函数组成的。因此,描述编程的一种方式是将一个庞大而复杂的任务分解成越来越小的子任务,直到最后子任务变得足够简单,可以使用这些简单的函数之一执行。
程序执行
[edit | edit source]执行从主函数开始,它是任何(符合标准的)C++程序的入口点。我们将在介绍函数时介绍它。
执行控制或简称为控制,是指程序执行的过程和位置,它与过程式编程直接相关。在继续学习的过程中,你会注意到控制的提及,因为它是一个必要的概念,可以解释代码的执行顺序及其由计算机的解释。
核心库与标准库
[edit | edit source]核心库包含语言本身的基本构建块。由 C++ 编译器固有地理解的基本语句组成。这包括基本的循环结构,如 if..else、do..while 和 for.. 语句。创建和修改变量、声明和调用函数以及执行基本算术的能力。核心库不包含 I/O 功能。
The 标准库是一组模块,通过使用库或头文件为语言添加扩展功能。输入/输出例程、高级数学和内存分配函数等功能都属于此类。所有 C++ 编译器都负责提供符合 ANSI/ISO C++ 指南 的标准库函数。有关每个模块的更深入的理解将在本书的 标准 C 库、标准输入/输出流库 和 标准模板库 (STL) 部分提供。
程序组织
[edit | edit source]程序的指令如何写出和存储通常不是由编程语言决定的。打孔卡曾经很常见,但在大多数现代操作系统下,指令通常保存为纯文本文件,可以使用任何文本编辑器进行编辑。这些文件是组成程序的指令的来源,因此有时被称为源文件,但更严格的定义是源代码。
当提到源代码或只是源代码时,你只考虑包含代码的文件,即构成函数(操作)的实际文本,供计算机执行。通过提到源文件,你将这个概念扩展到了不仅包含组成程序的指令的文件,还包括所有可以构建程序的原始文件资源。The 文件组织部分将涵盖 C++ 编程中使用的不同文件以及处理它们的最佳实践。
关键字和标识符
[edit | edit source]
标识符是赋予变量、函数、对象等的名称,以便在程序中引用它们。C++标识符必须以字母或下划线字符 "_
" 开头,后面可以是一系列字母、下划线或数字。C++编程语言的关键字都不能用作标识符。以连续下划线开头的标识符保留供头文件使用,或由编译器用于特殊目的,例如名称改编。
一些关键字用于直接控制编译器的行为,这些关键字非常强大,必须谨慎使用,它们可能会对程序的编译时间和运行速度产生重大影响。在 C++ 标准中,这些关键字被称为说明符。
创建自己的标识符时必须特别注意,这将在 代码风格约定部分中介绍。
ISO C++ 关键字
[edit | edit source]C++98 标准识别以下关键字
|
特定编译器可能(在非标准兼容模式下)也会将其他一些词语视为关键字,包括 cdecl
、far
、fortran
、huge
、interrupt
、near
、pascal
、typeof
。旧编译器可能识别 overload
关键字,它是一个过时的词语,已被从语言中删除。
当前版本的 C++,称为 C++11,添加了一些关键字
|
|
|
|
C++11 还添加了两个特殊词语,在某些情况下它们的行为类似于关键字,但在大多数情况下可以作为普通标识符使用
final
override
在编写新代码时,将它们用作标识符是一种不好的做法。
C++98 关键字 auto、default、delete 和 using 在 C++11 中有额外的或更改后的用法。
一些旧的 C++98 编译器可能无法识别以下一些或所有关键字
|
|
|
|
C++ 保留标识符
[edit | edit source]一些“非标准”标识符保留供不同用途使用,以避免供应商、库创建者和用户在命名标识符时发生冲突。
保留标识符包括带两个连续下划线的关键字 (__)、所有以一个下划线后跟一个大写字母开头的关键字,以及从 C 库规范继承的一些其他类别的保留标识符。
在互联网存档 Wayback Machine 的存档页面中可以找到 C 保留标识符列表:http://web.archive.org/web/20040209031039/http://oakroadsystems.com/tech/c-predef.htm#ReservedIdentifiers
- 源代码
源代码是人类语言和机器代码之间的中间环节。如前所述,它在一定程度上可以被人阅读,但也可以被计算机解析(转换)成机器代码。机器代码由一系列 1 和 0 表示,是计算机唯一可以直接理解和执行的代码。
在一个小型程序中,您最多可能只有几十行代码,而在大型程序中,这个数字可能会扩展到数千甚至数百万行。因此,有时将大量代码拆分成多个文件更实际。这样更容易阅读,因为您可以逐段阅读,而且还会缩短每个源文件的编译时间。编译大量小型源文件比编译单个大型源文件所需的时间少得多。
管理大小并不是拆分代码的唯一原因。通常,尤其是在大型团队开发软件时,会拆分源代码。程序不是一个大型文件,而是被分成单独的文件,每个单独的文件包含执行整个程序特定任务集的代码。这会创建一个称为“模块化”的条件。模块化是一种允许一次更改、添加或删除一部分源代码的质量。这样做的优点是可以让许多人同时处理同一程序的不同方面,从而使程序开发速度更快、更流畅。大型项目的源代码应始终以模块化为目标编写。即使在处理小型或中型项目时,也应该养成以易于编辑和使用的代码编写习惯。
C++ 源代码区分大小写。这意味着它区分大小写字母,因此它将“hello”、“Hello”和“HeLlO”视为完全不同的东西。这一点很重要,请牢记并理解,将在编码风格规范部分中进一步讨论。