无题

简介/入门

0.1 教程的简介

欢迎来到学习 C++ 教程!最重要的是,这些教程的目的是让学习 C++ 变得容易。

与许多其他网站和书籍不同,这些教程不假设您之前有任何编程经验。随着您的进步,我们将教您所需了解的一切,并提供大量示例。

无论您是出于业余爱好还是为了职业发展而学习 C++,您都来对地方了!

本介绍性章节中的课程旨在为您提供有关 C++ 是什么、它是如何产生的、程序如何工作以及需要安装哪些软件来创建自己的程序的一些背景信息。您甚至可以编写自己的第一个程序。

后续章节将探讨 C++ 语言的不同部分。在第一章(第 1 章)中,您将对许多基本 C++ 概念进行广泛但浅显的概述,因此我们可以开始编写一些简单的程序。后续章节将深入探讨这些概念,或介绍新概念。

每一章都有一个主题,其下面的大部分课程通常与该主题相关。没有建议您应该花在每课或每章上的时间;以您觉得舒服的速度学习材料。


目标

在开始之前,让我们先介绍一下这些教程的几个重要目标:

  • 涵盖一般编程主题以及 C++。传统教科书在教授特定编程语言的基础知识方面做得相当不错,但它们通常不涵盖与该语言无关的其他编程主题。例如,书籍会省略有关编程风格、常见陷阱、调试、良好/不良编程实践和测试的部分。因此,当您读完这本书时,您可能理解了如何使用一种语言进行编程,但您可能也养成了以后会反噬您的坏习惯!这些教程的目标之一是确保在自然讨论这些主题的部分中涵盖所有这些附带主题。当您读完时,您不仅会知道如何用 C++ 编程,还会知道如何不使用 C++ 编程,这可以说同样重要。
  • 提供大量示例。大多数人通过遵循示例学到的东西与通过阅读文本学到的东西一样多,甚至更多。这些教程将努力提供大量清晰、简洁的示例来展示您正在学习的概念的应用。我们还将(尽可能)避免双重弊端:省略号也称为),其中为了节省空间而省略示例中必要或不明显的部分,以及未解释的新概念,其中引入了示例中不可或缺的新概念,但没有提及它是什么或它如何工作。这两种情况都容易导致卡住。
  • 提供练习计划。许多课程和章节的末尾都会包含一些练习,你可以尝试自己回答,并附上解决方案。你可以将你的解决方案与我们的解决方案进行比较,看看我们做了哪些不同的事情,或者,如果你遇到困难,看看我们是如何解决问题的。然后你可以回过头来重新关注你需要进一步努力的领域。
  • 最重要的是:玩得开心。编程可以很有趣,如果你总是玩得不开心,那你就没有正确的心态去编程。疲惫或不开心的程序员会犯错误,调试代码往往比一开始就写对代码要花更长的时间!通常,你可以上床睡觉,睡个好觉,第二天早上再回来解决问题,这样可以节省一些时间。

0.2 — 编程语言简介

现代计算机的速度快得令人难以置信,而且速度一直在不断提高。然而,计算机也有一些明显的限制:它们只能理解一组有限的指令,必须有人告诉它们该做什么。

计算机程序(通常也称为应用程序)是计算机可以遵循以执行某些任务的一组指令。程序是使用编程语言编写的,编程语言是一种旨在方便编写计算机指令的语言。

使用编程语言编写程序的过程称为编程。程序员通常通过创建源代码(通常简称为代码)来编写程序,源代码是一个或多个包含用编程语言编写的指令的文本文件。

当计算机被要求处理特定程序中的指令时,我们称计算机正在运行执行该程序。程序在计算机硬件(组成计算机的物理组件)上物理执行。

典型计算设备上值得注意的硬件包括:

  • 交互式设备(例如显示器、触摸屏、键盘或鼠标),允许人与计算机交互。
  • 存储设备(例如硬盘、SSD 或闪存),即使在计算机关闭时也能存储信息。
  • 内存,计算机程序在执行之前加载于其中。
  • CPU(中央处理单元,通常被称为计算机的“大脑”),实际执行指令。

在现代计算中,程序通常不仅与硬件交互,还与系统上的其他软件(特别是操作系统)交互。平台一词是指一组兼容的硬件(CPU)和软件(操作系统、浏览器等),为软件应用程序提供运行环境。例如,“PC”一词在口语中是指由在 x86 系列 CPU 上运行的 Windows 操作系统组成的平台。


机器语言

计算机的 CPU 无法理解 C++。相反,CPU 只能处理用机器语言(或机器代码)编写的指令。给定 CPU 可以理解的所有可能的机器语言指令的集合称为指令集

以下是机器语言指令示例:10110000 01100001

每条指令都由 CPU 解释为执行特定任务的命令,例如“比较这两个数字”或“将此数字复制到该内存位置”。当计算机刚刚发明时,程序员必须直接用机器语言编写程序,这是非常困难且耗时的。

如何组织和解释这些指令超出了本教程系列的范围,但有两点值得注意。

首先,每条指令都由一串 1 和 0 组成。每个单独的 0 或 1 称为二进制数字,简称为。机器语言指令中的位数各不相同 - 例如,某些 CPU 处理的指令始终为 32 位长,而其他一些 CPU(例如您可能正在使用的 x86 系列 CPU)的指令长度可变。

其次,每个兼容 CPU 系列(例如 x86、Arm64)都有自己的机器语言,并且该机器语言与其他 CPU 系列的机器语言不兼容。这意味着为一个 CPU 系列编写的机器语言程序不能在不同系列的 CPU 上运行!


汇编语言

由于机器语言对于人类来说很难阅读和理解,因此人们发明了汇编语言。在汇编语言中,每条指令都用一个简短的缩写(而不是一组位)来标识,并且可以使用名称和其他数字。

以下是 x86 汇编语言中与上面相同的指令:mov al, 061h

这使得汇编语言比机器语言更易于读写。用汇编语言编写的程序往往非常快,而且在速度至关重要的情况下(或在资源严重受限的环境中),汇编语言至今仍在使用。

然而,由于 CPU 只能理解机器语言,因此必须先将汇编程序翻译成机器语言,然后计算机才能执行它们。这是通过使用一种称为汇编器的程序来完成的,该程序将汇编程序作为输入,并输出可运行的机器语言程序。

汇编语言和机器语言本质上具有相同的缺点。

  • 汇编程序很难理解。虽然个别汇编指令可以理解,但很难推断出一段汇编代码实际上在做什么。而且,由于汇编程序需要许多指令才能完成哪怕是简单的任务,因此它们往往很长。
  • 汇编程序不可移植。每个 CPU 系列都有自己的汇编语言,这些语言旨在汇编成同一 CPU 系列的机器语言。用汇编语言编写的程序无法轻易汇编成不同 CPU 系列的机器语言。

高级语言

为了解决机器语言和汇编语言的可理解性和可移植性问题,人们开发了 C、C++、Pascal 等新的编程语言(后来又开发了 Java、Javascript 和 Perl 等语言)。这些语言被称为高级语言

这是与上面相同的 C/C++ 指令:a = 97;

与汇编语言程序非常相似,用高级语言编写的程序必须先翻译成机器语言才能运行。主要有两种方法:编译和解释。

C++ 程序通常经过编译。编译器是一个程序(或程序集合),它读取源代码(通常用高级语言编写)并将其翻译成其他语言(通常是低级语言,例如机器语言或汇编语言(然后可以将其汇编成机器语言))。这些机器语言文件通常会组合成可执行文件(包含机器语言指令),可运行或分发给其他人。值得注意的是,运行可执行文件不需要安装编译器。

最初,编译器非常原始,生成的汇编代码或机器代码速度缓慢、未经优化。然而,多年来,编译器已经变得非常擅长生成快速、优化的代码,在某些情况下,它甚至比人类在汇编语言中的表现还要好!

以下是编译过程的简化表示:

image-20250107114003073

或者说,解释器是一种直接执行源代码中的指令而无需先将其编译为可执行文件的程序。解释器往往比编译器更灵活,但在运行程序时效率较低,因为每次运行程序时都需要进行解释过程。这也意味着必须在每台将运行解释程序的机器上安装解释器。

以下是解释过程的简化表示:

image-20250107114021873

大多数语言既可以编译也可以解释。传统上,高级语言(如 C、C++ 和 Pascal)是编译型的,而“脚本”语言(如 Perl 和 Javascript)则倾向于解释型。某些语言(如 Java)则混合使用这两种语言。我们将在稍后更详细地探讨 C++ 编译器。

高级语言有许多理想的特性:

  • 高级语言更容易读写,因为指令更接近我们日常使用的自然语言。这也使它们更容易学习。
  • 高级语言需要更少的指令来执行与低级语言相同的任务。在 C++ 中,您可以a = b * 2 + 5;在一行中完成类似的事情。在汇编语言中,这需要 4 到 6 条不同的指令。这使得使用高级语言编写的程序更加简洁易懂。
  • 高级语言在设计时往往考虑到了可移植性。如果我们足够谨慎,我们可以编写一个程序,然后编译它,这样它就可以在许多不同的平台上运行。跨平台程序是指设计为在多个平台上运行的程序。

image-20250107114042440

0.3 C/C++ 简介

在 C++ 之前,有 C

C 语言由贝尔电话实验室的 Dennis Ritchie 于 1972 年开发,主要用作系统编程语言(用于编写操作系统的语言)。Ritchie 的主要目标是开发一种易于编译、允许高效访问内存、生成高效代码且自包含(不依赖于其他程序)的简约语言。作为高级语言,C 旨在为程序员提供大量控制权,同时允许开发人员编写可以在不同平台上运行的程序。

C 语言非常高效灵活,1973 年,Ritchie 和 Ken Thompson 用 C 语言重写了 Unix 操作系统的大部分内容。之前的许多操作系统都是用汇编语言编写的。与汇编语言编写的程序只能在特定 CPU 上运行不同,C 语言具有出色的可移植性,使 Unix 能够在多种不同类型的计算机上轻松重新编译,从而加快了其普及速度。C 语言和 Unix 的命运息息相关,C 语言的流行在一定程度上与 Unix 作为操作系统的成功息息相关。

1978 年,Brian Kernighan 和 Dennis Ritchie 出版了一本名为《C 编程语言》的书。这本书通常被称为 K&R(以作者姓氏命名),它为该语言提供了非正式规范,并成为事实上的标准。当需要最大限度的可移植性时,程序员会遵循 K&R 中的建议,因为当时大多数编译器都是按照 K&R 标准实现的。

1983 年,美国国家标准协会 (ANSI) 成立了一个委员会,为 C 语言制定正式标准。1989 年(委员会做任何事情都花很长时间),他们完成并发布了 C89 标准,即通常所说的 ANSI C。1990 年,国际标准化组织 (ISO) 采用了 ANSI C(略作修改)。这个版本的 C 语言被称为 C90。编译器最终符合 ANSI C/C90 标准,需要最大可移植性的程序都按照此标准进行编码。

1999 年,ISO 委员会发布了新版 C 语言,非正式名称为 C99。C99 采纳了许多已作为扩展进入编译器或已在 C++ 中实现的功能。


C++

C++(发音为“see plus plus”)由 Bjarne Stroustrup 在贝尔实验室开发,作为 C 的扩展,始于 1979 年。C++ 为 C 语言添加了许多新功能,也许最好将其视为 C 的超集,尽管这并不完全正确(因为 C99 引入了一些 C++ 中不存在的功能)。C++ 相对于 C 最显著的创新是它支持面向对象编程。至于“对象”是什么以及它与传统编程方法有何不同,我们将在后面的章节中介绍。

C++ 于 1998 年由 ISO 委员会标准化。这意味着 ISO 标准委员会批准了一份文档(称为标准文档),该文档提供了 C++ 语言的正式描述。标准化的目标是帮助确保 C++ 代码在不同的编译器和平台上的行为一致。

该语言的一个小更新版本于 2003 年发布(非正式名称为 C++03)。

从那时起,C++ 语言已经进行了五次重大更新(非正式名称为 C++11、C++14、C++17、C++20 和 C++23),每次更新都增加了额外的功能。尤其是 C++11 增加了大量新功能,被广泛认为是该语言的新基准版本。预计该语言未来每三年左右会进行一次升级。

由于已获批准标准的正式名称很复杂(C++20 的正式名称为 ISO/IEC 14882:2020),因此通常使用非正式名称来指代标准,其中包括出版年份(或预计出版年份)的最后两位数字。例如,C++20 指的是 2020 年发布的语言版本。


C 和 C++ 的哲学

C 和 C++ 的基本设计理念可以概括为“信任程序员”——这既美妙又危险。C++ 的设计允许程序员高度自由地做他们想做的事情。然而,这也意味着语言通常不会阻止你做没有意义的事情,因为它会假设你这样做是出于某种它无法理解的原因。如果新程序员没有意识到这一点,他们很可能会陷入很多陷阱。这就是为什么知道在 C/C++ 中你不应该做什么几乎和知道你应该做什么一样重要的主要原因之一。

Code
问:C++ 擅长什么?

C++ 在需要高性能和对内存及其他资源进行精确控制的情况下表现出色。以下是 C++ 擅长的几种应用程序:

电子游戏
实时系统(例如运输、制造等)
高性能金融应用程序(例如高频交易)
图形应用程序和模拟
生产力/办公应用程序
嵌入式软件
音频和视频处理
人工智能和神经网络
C++ 还拥有大量可用的高质量第三方库,可以大大缩短开发时间。
Code
问:C++ 不是正在消亡吗?

不是。调查一致表明,C++ 是第二或第三大最受欢迎的编译语言(仅次于 Java,有时也排在 C# 之后,略高于 C),也是第五或第六大最受欢迎的语言(不包括 HTML、SQL 和 shell 脚本语言)。

C++ 是学习编码最受欢迎的语言之一,因为它拥有丰富的教学资源、庞大的社区以及教授它的大学课程。

随着每三年一次的语言更新、大量有用的第三方库以及在广受欢迎的视频游戏行业中的主导地位,C++ 继续蓬勃发展。
Code
问:在学习这些教程之前我需要了解 C 语言吗?

不!从 C++ 开始完全没问题,我们会教你所有你需要知道的知识(包括要避免的陷阱)。

一旦你了解了 C++,如果有需要的话,学习标准 C 应该相当容易。如今,C 主要用于小众用例:在嵌入式设备上运行的代码,当你需要与只能与 C 交互的其他语言交互时,等等……对于大多数其他情况,建议使用 C++。

0.4 C++ 开发简介

在我们编写和执行第一个 C++ 程序之前,我们需要更详细地了解 C++ 程序的开发方式。下面是一张概述简单方法的图表:

image-20250107114904157


步骤 1:定义你想要解决的问题

这是“什么”步骤,在此步骤中,您要弄清楚要解决什么问题。提出要编程的初始想法可能是最简单的步骤,也可能是最困难的一步。但从概念上讲,这是最简单的。您所需要的只是一个可以很好地定义的想法,然后您就可以为下一步做好准备了。

以下是一些示例:

  • “我想编写一个程序,让我输入许多数字,然后计算平均值。”
  • “我想编写一个程序来生成一个二维迷宫并让用户在其中导航。如果用户到达终点,他们就赢了。”
  • “我想编写一个程序,读取股票价格文件并预测股票价格是上涨还是下跌。”

第 2 步:确定如何解决问题

这是“如何”步骤,在此步骤中,您要确定如何解决在步骤 1 中提出的问题。这也是软件开发中最容易被忽视的步骤。问题的关键在于,解决问题的方法有很多种——但是,有些解决方案是好的,有些是坏的。程序员经常会有想法,坐下来,立即开始编写解决方案。这通常会产生属于糟糕类别的解决方案。

通常,好的解决方案具有以下特点:

  • 它们很简单(不会过于复杂或令人困惑)。
  • 它们有详实的记录(特别是围绕所做的任何假设或限制)。
  • 它们是模块化构建的,因此各个部分可以重复使用或稍后更改,而不会影响程序的其他部分。
  • 当发生意外情况时,它们可以正常恢复或给出有用的错误消息。

当你坐下来立即开始编码时,你通常会想“我想做<某事>”,所以你会实施最快实现目标的解决方案。这可能会导致程序变得脆弱、难以更改或扩展,或者有很多错误。错误是任何一种阻止程序正常运行的编程错误。

Code
顺便说一下……

托马斯·爱迪生在 19 世纪 70 年代首次使用了“bug”一词!然而,该术语在 20 世纪 40 年代才开始流行,当时工程师们发现一只真正的飞蛾卡在一台早期计算机的硬件中,导致电路短路。记录错误的日志和飞蛾现在都属于史密森尼美国历史博物馆。

各种研究表明,在复杂的软件系统中,程序员实际上只用 10-40% 的时间编写初始程序。其余 60-90% 的时间用于维护,包括调试(删除错误)、更新以应对环境变化(例如在新的操作系统版本上运行)、增强(为提高可用性或能力而进行的细微更改)或内部改进(以提高可靠性或可维护性)。

因此,值得你花一点额外的时间(在开始编码之前)思考解决问题的最佳方法、你做出了哪些假设以及如何规划未来,以便在以后节省大量时间和避免麻烦。

我们将在以后的课程中进一步讨论如何有效地设计问题的解决方案。


步骤3:编写程序

为了编写程序,我们需要两样东西:首先,我们需要掌握编程语言——这就是这些教程的目的!其次,我们需要一个文本编辑器来编写和保存我们的 C++ 程序。我们输入到文本编辑器中的一组 C++ 指令称为程序的源代码(通常缩写为代码)。您可以使用任何文本编辑器编写程序,甚至可以使用像 Windows 的记事本或 Unix 的 vi 或 pico 这样简单的编辑器。

在基本文本编辑器中输入的程序看起来是这样的:

c++
#include <iostream>

int main()
{
    std::cout << "Here is some text.";
    return 0;
}

但是,我们强烈建议您使用专为编程而设计的编辑器(称为代码编辑器)。如果您还没有,请不要担心。我们将很快介绍如何安装代码编辑器。

许多简单的 C++ 程序只有一个源代码文件,但复杂的 C++ 程序可能有数百甚至数千个源代码文件。

程序中的每个源代码文件都需要保存到磁盘,这意味着每个源代码文件都需要一个文件名。C++ 对文件命名没有任何要求。但是,事实上的标准是将为程序创建的第一个/主要源文件命名为main.cpp。文件名 ( main) 可以轻松确定哪个是主要源代码文件,.cpp扩展名表示该文件是 C++ 源代码文件。

您可能偶尔会看到以程序名称命名的第一个/主要源代码文件(例如calculator.cpppoker.cpp。您也可能偶尔会看到使用其他扩展名(例如.cc.cxx)。


步骤 4:编译源代码

为了编译 C++ 源代码文件,我们使用 C++ 编译器。C++ 编译器按顺序检查程序中的每个源代码 (.cpp) 文件并执行两项重要任务:

首先,编译器会检查您的 C++ 代码,以确保它符合 C++ 语言的规则。如果不符合,编译器会给出错误(以及相应的行号),帮助您确定需要修复的内容。编译过程也会中止,直到错误得到修复。

其次,编译器将 C++ 代码翻译成机器语言指令。这些指令存储在中间文件中,称为目标文件。目标文件还包含后续步骤中需要或有用的其他数据(包括步骤 5 中链接器所需的数据以及步骤 7 中调试所需的数据)。

目标文件通常命名为name.oname.obj,其中name与生成它的 .cpp 文件的名称相同。

例如,如果你的程序有 3 个 .cpp 文件,编译器将生成 3 个目标文件:

image-20250107115652035

C++ 编译器适用于多种不同的操作系统。我们将很快讨论如何安装编译器,因此现在无需讨论。


步骤 5:链接目标文件和库

编译器成功完成后,另一个名为“链接器”的程序开始运行。链接器的工作是将所有目标文件组合起来并生成所需的输出文件(例如,可以运行的可执行文件)。这个过程称为“链接”

首先,链接器读入编译器生成的每个目标文件并确保它们有效。

其次,链接器确保正确解析所有跨文件依赖关系。例如,如果您在一个 .cpp 文件中定义某个内容,然后在另一个 .cpp 文件中使用它,则链接器会将两者连接在一起。如果链接器无法将对某个内容的引用与其定义连接起来,您将收到链接器错误,并且链接过程将中止。

第三,链接器还能够链接库文件。库文件是一组预编译的代码,这些代码已被“打包”以供其他程序重复使用。

C++ 附带一个称为C++ 标准库(通常称为“标准库”)的扩展库,它提供了一组可用于程序的有用功能。C++ 标准库中最常用的部分之一是输入/输出库(通常称为“iostream”),它包含在显示器上打印文本和从用户那里获取键盘输入的功能。几乎每个编写的 C++ 程序都以某种形式使用标准库,因此将标准库链接到您的程序中是很常见的。大多数 C++ 链接器都配置为默认链接到标准库,因此这通常不是您需要担心的事情。

您还可以选择链接其他库。例如,如果您要编写一个播放声音的程序,您可能不想编写自己的代码来从磁盘读取声音文件,检查以确保它们有效,或者弄清楚如何将声音数据路由到操作系统或硬件以通过扬声器播放 - 这将是大量的工作!相反,您可能会下载一个已经知道如何做这些事情的库,然后使用它。我们将在附录中讨论如何链接库(并创建您自己的库!)。

image-20250107115823805

最后,链接器输出所需的输出文件(通常是可执行文件,但如果您是这样设置项目的,则可以是库文件)。


步骤 6 和 7:测试和调试

这是最有趣的部分!现在您可以运行可执行文件并查看它的功能!

一旦可以运行程序,就可以测试它了。测试是评估软件是否按预期运行的过程。基本测试通常涉及尝试不同的输入组合,以确保软件在不同情况下正常运行。

如果程序没有按预期运行,那么您将必须进行一些调试,即查找和修复编程错误的过程。

我们将在后面的章节中更详细地讨论如何测试和调试您的程序。


集成开发环境 (IDE)

请注意,步骤 3、4、5 和 7 都涉及必须安装的软件程序(编辑器、编译器、链接器、调试器)。虽然您可以为每项活动使用单独的程序,但称为集成开发环境 (IDE) 的软件包将所有这些功能捆绑并集成在一起。


0.7 编译你的第一个程序

在我们编写第一个程序之前,我们需要学习如何在集成开发环境 (IDE) 中创建新程序。在本课中,我们将介绍如何做到这一点,您还将编译并执行您的第一个程序!


项目

要在 IDE 中编写 C++ 程序,我们通常首先创建一个新项目(稍后我们将向您展示如何执行此操作)。项目一个容器,其中包含生成可运行或使用的可执行文件(或库、网站等)所需的所有源代码文件、图像、数据文件等。该项目还保存了各种 IDE、编译器和链接器设置,并记住了您上次中断的位置,以便您稍后重新打开项目时,IDE 的状态可以恢复到您上次中断的位置。当您选择编译程序时,项目中的所有 .cpp 文件都将被编译和链接。

每个项目对应一个程序。当您准备创建第二个程序时,您需要创建一个新项目,或者覆盖现有项目中的代码(如果您不想保留它)。项目文件通常是特定于 IDE 的,因此为一个 IDE 创建的项目需要在另一个 IDE 中重新创建。


控制台项目

当您创建新项目时,通常会询问您要创建什么类型的项目。本教程中我们将创建的所有项目都是控制台项目。控制台项目意味着我们将创建可以从 Windows、Linux 或 Mac 控制台运行的程序。

以下是 Windows 控制台的屏幕截图:

Windows 控制台


默认情况下,控制台应用程序没有图形用户界面 (GUI),它们将文本打印到控制台,从键盘读取输入,并编译为独立的可执行文件。这对于学习 C++ 来说非常完美,因为它将复杂性降至最低,并确保程序可以在各种系统上运行。

如果您以前从未使用过控制台,或者不知道如何访问它,请不要担心。我们将通过 IDE(在必要时将调用控制台)编译和启动我们的程序。


工作区/解决方案

当您为程序创建新项目时,许多 IDE 会自动将您的项目添加到“工作区”或“解决方案”(不同 IDE 的术语不同)。工作区或解决方案是可以容纳一个或多个相关项目的容器。例如,如果您正在编写游戏并希望为单人游戏和多人游戏分别创建可执行文件,则需要创建两个项目。让这两个项目完全独立是没有意义的——毕竟,它们是同一款游戏的一部分。最有可能的是,每个项目都将配置为单个工作区/解决方案中的单独项目。

虽然您可以将多个项目添加到单个解决方案中,但我们通常建议为每个程序创建一个新的工作区或解决方案,尤其是在学习时。这样更简单,出错的可能性也更小。


编写你的第一个程序

传统上,程序员用新语言编写的第一个程序是hello world 程序


在 Visual Studio 2019(或更高版本)中创建项目

当你运行 Visual Studio 2019(或更新版本)时,你应该会看到如下对话框:

Visual Studio 2019 入门对话框

选择创建新项目

然后你会看到一个如下所示的对话框:

Visual Studio 2019 创建新项目对话框

如果您已经打开了之前的项目,您可以通过文件菜单 > 新建 > 项目访问此对话框。

选择Windows 桌面向导并单击下一步。如果您没有看到此信息,那么您可能忘记在安装 Visual Studio 时选择安装使用 C++ 的桌面开发工作负载。在这种情况下,请返回课程0.6 - 安装集成开发环境 (IDE)并按照指示重新安装 Visual Studio(注意:您可以运行 Visual Studio 安装程序并修改现有安装以添加 C++ 工作负载,而不是完全重新安装)。

接下来,您将看到如下对话框:

Visual Studio 2019 配置新项目对话框

将现有项目名称替换为HelloWorld

建议您还检查将解决方案和项目放在同一目录中,因为这可以减少每个项目创建的子目录的数量。

单击“创建”继续。

最后,您将看到最后一个对话框:

Visual Studio 2019 项目选项对话框

确保应用程序类型设置为控制台应用程序(.exe),并且未选择预编译头文件选项。然后单击确定

您现在已经创建了一个项目!跳转到下面的Visual Studio 解决方案资源管理器部分继续。


在 Visual Studio 2017 或更早版本中创建项目

要在 Visual Studio 2017 或更早版本中创建新项目,请转到文件菜单 > 新建 > 项目。将弹出一个如下所示的对话框:

Visual Studio 2017 新建项目对话框

首先,确保左侧列出了Visual C++ 。如果您没有看到**Visual C++,那么您可能忘记在安装 Visual Studio 时选择安装使用 C++ 的桌面开发工作负载。在这种情况下,请返回课程0.6 - 安装集成开发环境 (IDE)并按照指示重新安装 Visual Studio(注意:您可以运行 Visual Studio 安装程序并修改现有安装以添加 C++ 工作负载,而不是完全重新安装)。

如果您使用的是 Visual Studio 2017 v15.3 或更新版本,请在Visual C++下选择“Windows 桌面”,然后在主窗口中选择“Windows 桌面向导” 。

如果您没有看到Windows 桌面选项,则可能是您使用的是旧版本的 Visual Studio。没关系。相反,请在主窗口中选择Win32 ,然后选择Win32 控制台应用程序。

在下面的名称字段中,输入程序的名称(将现有名称替换为HelloWorld)。在位置字段中,您可以选择将项目放置到其他位置。目前默认即可。

单击“确定”。如果您使用的是旧版本的 Visual Studio,则将启动 Win32 应用程序向导。按“下一步”

此时,您应该看到一个类似这样的向导对话框(旧版本的 Visual Studio 使用不同的样式,但大多数选项相同):