在编写第一个程序之前,我们需要学习如何在集成开发环境 (IDE) 中创建新程序。在本课程中,我们将介绍如何做到这一点,您还将编译并执行您的第一个程序!
项目
要在 IDE 中编写 C++ 程序,我们通常首先创建一个新项目(稍后我们将向您展示如何执行此操作)。项目是一个容器,其中包含生成可以运行或使用的可执行文件(或库、网站等)所需的所有源代码文件、图像、数据文件等。该项目还保存各种 IDE、编译器和链接器设置,并记住您离开的位置,以便稍后重新打开项目时,IDE 的状态可以恢复到您离开的位置。当您选择编译程序时,项目中的所有 .cpp 文件都将被编译和链接。
每个项目对应一个程序。当您准备好创建第二个程序时,您需要创建一个新项目,或者覆盖现有项目中的代码(如果您不想保留它)。项目文件通常是特定于 IDE 的,因此为一个 IDE 创建的项目需要在不同的 IDE 中重新创建。
控制台项目
创建新项目时,通常会询问您要创建什么类型的项目。我们将在本教程中创建的所有项目都将是控制台项目。控制台项目意味着我们将创建可以从 Windows、Linux 或 Mac 控制台运行的程序。
这是 Windows 控制台的屏幕截图:
默认情况下,控制台应用程序没有图形用户界面 (GUI),它们将文本打印到控制台,从键盘读取输入,并编译成独立的可执行文件。这非常适合学习 C++,因为它将复杂性降至最低,并确保可以在各种系统上运行。
如果您以前从未使用过控制台,或者不知道如何访问它,请不要担心。我们将通过 IDE 编译并启动程序(必要时将调用控制台)。
工作区/解决方案
当您为程序创建新项目时,许多 IDE 会自动将您的项目添加到“工作区”或“解决方案”(该术语因 IDE 而异)。工作区或解决方案是一种可以容纳一个或多个相关项目的容器。例如,如果您正在编写游戏并希望为单人游戏和多人游戏提供单独的可执行文件,则需要创建两个项目。这两个项目完全独立是没有意义的——毕竟,它们是同一个游戏的一部分。最有可能的是,每个项目都将配置为单个工作区/解决方案中的单独项目。
尽管您可以将多个项目添加到单个解决方案中,但我们通常建议为每个程序创建一个新的工作区或解决方案,尤其是在学习时。它更简单,出错的可能性也更小。
编写你的第一个程序
传统上,程序员用新语言编写的第一个程序就是hello world 程序。
在 Visual Studio 2019(或更高版本)中创建项目
运行 Visual Studio 2019(或更高版本)时,您应该看到一个如下所示的对话框:
选择create a new project创建新项目。
然后您将看到一个如下所示的对话框:
如果您已经打开了以前的项目,则可以通过“文件”菜单 >“新建”>“项目”访问此对话框。
选择“Windows Desktop Wizard”并单击“下一步”。如果您没有看到这一点,那么您可能在安装 Visual Studio 时忘记选择安装使用 C++ workload的桌面开发。在这种情况下,请返回安装集成开发环境 (IDE)并按照指示重新安装 Visual Studio(注意:您可以运行 Visual Studio 安装程序并修改现有安装以添加C++ workload)。
接下来,您将看到一个如下所示的对话框:
将现有项目名称替换为HelloWorld
.
建议您还检查“place solution and project in the same directory”,因为这会减少随每个项目创建的子目录的数量。
单击“创建”继续。
最后,您将看到最后一个对话框:
确保应用程序类型设置为console application (.exe),并且未选择precomplied header,然后单击“确定”。
您现在已经创建了一个项目!跳至下面的Visual Studio 解决方案资源管理器部分继续。
问:什么是预编译头(precomplied header)?为什么我们要关闭它们?
在大型项目(具有许多代码文件的项目)中,预编译头可以通过避免大型项目中容易出现的一些冗余编译来提高编译速度。
但是,使用预编译头需要额外的工作,并且对于小型项目(例如您将在我们的教程中创建的项目),编译时间几乎没有差异。
因此,我们建议一开始就关闭预编译头,只有在您发现编译时间受到影响时才启用它们。
在 Visual Studio 2017 或更早版本中创建项目
要在 Visual Studio 2017 或更早版本中创建新项目,请转到“文件”菜单 >“新建”>“项目”。将弹出一个对话框,如下所示:
首先,确保Visual C++列在左侧。如果您没有看到Visual C++ ,那么您可能在安装 Visual Studio 时忘记选择安装使用 C++ workload的桌面开发。在这种情况下,请返回安装集成开发环境 (IDE)并按照指示重新安装 Visual Studio(注意:您可以运行 Visual Studio 安装程序并修改现有安装以添加C++workload)。
如果您使用的是 Visual Studio 2017 v15.3 或更高版本,请在Visual C++下选择Windows 桌面,然后在主窗口中选择Windows 桌面向导。
如果您没有看到Windows 桌面选项,则您可能使用的是旧版本的 Visual Studio。没关系。相反,请在主窗口中选择“Win32”,然后选择“Win32 控制台应用程序” 。
在下方的“名称”字段中,输入程序的名称(将现有名称替换为HelloWorld
)。在“位置”字段中,您可以选择将项目放置到的不同位置。目前默认就可以了。
单击“确定”。如果您使用的是旧版本的 Visual Studio,则会启动 Win32 应用程序向导。按下一步。
此时,您应该看到一个如下所示的向导对话框(旧版本的 Visual Studio 使用不同的样式,但具有大部分相同的选项):
确保取消选中Precompiled Header。
然后单击“确定”或“完成”。现在您的项目已创建!
Visual Studio 解决方案资源管理器
在窗口的左侧或右侧,您应该会看到一个标题为“解决方案资源管理器”的窗口。在此窗口中,Visual Studio 已为您创建了一个解决方案(解决方案“HelloWorld”)。其中,名称以粗体显示的是您的新项目 ( HelloWorld )。在项目中,Visual Studio 已为您创建了许多文件,包括HelloWorld.cpp(位于“源文件”树项下)。您可能还会看到一些其他 .cpp 或 .h 文件,您现在可以忽略它们。
在文本编辑器中,您将看到 Visual Studio 已打开HelloWorld.cpp并为您创建了一些代码。选择并删除所有代码,然后将以下内容键入/复制到您的 IDE 中:
#include <iostream>
int main()
{
std::cout << "Hello, world!";
return 0;
}
要编译程序,请按F7(如果这不起作用,请尝试Ctrl-Shift-B)或转到“生成”菜单 >“生成解决方案”。如果一切顺利,您应该会在“输出”窗口中看到以下内容:
1>------ 构建开始:项目:HelloWorld,配置:调试 Win32 ------
1>HelloWorld.cpp
1>HelloWorld.vcxproj -> c:\users\alex\documents\visual studio 2017\ Projects\HelloWorld\Debug\HelloWorld.exe
========== 构建:1 成功,0 失败,0 最新,0 跳过 ==========
这说明你的编译成功了!
问:我收到错误 C1010(“致命错误 C1010:查找预编译头时文件意外结束。您是否忘记将 ‘#include “stdafx.h”‘ 添加到源代码中?”)。
您在创建项目时忘记关闭预编译头。重新创建您的项目(按照上面的说明)并确保禁用预编译头。
要运行已编译的程序,请按Ctrl-F5,或转到“调试”菜单并选择“启动而不调试”。您将看到以下内容:
恭喜,您已经编译并运行了您的第一个程序!
当直接从 Visual Studio 运行程序时,您可能会看到如下所示的附加输出行:
C:\Users\Alex\source\repos\Project6\Debug\Project6.exe(进程 21896)退出,代码为 0。这个是正常的。
Visual Studio 提供了一些有关程序正常退出还是异常退出的附加信息。
在 Code::Blocks 中创建项目
要创建新项目,请转到“文件”菜单 >“新建”>“项目”。将弹出一个对话框,如下所示:
选择控制台应用程序(Console Application)并按执行(或创建)按钮。
如果您看到控制台应用程序向导对话框,请按“下一步”,确保选择“C++”,然后再次按“下一步”。
现在您将被要求命名您的项目。为项目命名HelloWorld
。您可以将其保存在任何您想要的地方。在 Windows 上,我们建议您将其保存在 C 盘的子目录中,例如C:\CBProjects
.
您可能会看到另一个对话框,询问您要启用哪些配置。此处的默认值应该没问题,因此选择Finish。
现在您的新项目已创建。
在屏幕左侧,您应该会看到一个管理窗口,其中选择了“项目”选项卡。在该窗口内,您将看到一个Workspace文件夹,其中包含您的HelloWorld项目:
在HelloWorld项目中,展开Sources文件夹,然后双击“main.cpp”。你会看到一个hello world程序已经为你编写好了!
将其替换为以下内容:
#include <iostream>
int main()
{
std::cout << "Hello, world!";
return 0;
}
要构建项目,请按Ctrl-F9,或转到“构建”菜单 >“构建”。如果一切顺利,您应该会在“构建日志”窗口中看到以下内容:
-------------- 构建:在 HelloWorld 中调试(编译器:GNU GCC 编译器)----------------
mingw32-g++.exe -Wall -fexceptions -g -std=c++14 -c C:\CBProjects\HelloWorld\main.cpp -o obj\Debug\main.o
mingw32-g++.exe -o bin\Debug\HelloWorld.exe obj\Debug\main。 o
输出文件为 bin\Debug\HelloWorld.exe,大小为 1.51 MB
进程终止,状态为 0(0 分钟、0 秒)、
0 个错误、0 个警告(0 分钟) , 0 秒)
这说明你的编译成功了!
要运行已编译的程序,请按Ctrl-F10,或转到“构建”菜单 >“运行”。您将看到类似于以下内容的内容:
在 VS Code 中创建项目
要启动新项目,请转到“视图”>“资源管理器”菜单(或按Ctrl-Shift-E)。这将打开资源管理器窗格。如果您之前没有打开过项目,您应该会在资源管理器窗格中看到一个“打开文件夹”按钮 – 按下它。如果已经有一个打开的项目并且您想要开始一个新项目,请从顶部导航栏中选择“文件”>“打开文件夹” 。
在打开的对话框中,创建一个名为HelloWorld的新文件夹,然后选择该文件夹。该文件夹将是您的项目文件夹。
接下来,我们需要创建包含源代码的文件。从顶部导航栏中选择“文件”>“新建文件” ,或单击资源管理器窗格中HELLOWORLD右侧的“新建文件”图标。
将文件命名为 main.cpp并向其中添加以下内容:
#include <iostream>
int main()
{
std::cout << "Hello, world!";
return 0;
}
要编译main.cpp并运行程序,请确保main.cpp在主窗格中打开,然后从顶部导航栏中选择Run > Run Without Debugging ,或者单击右侧播放图标右侧的v main.cpp选项卡并选择Run C/C++ File。
接下来,选择g++ 构建和调试活动文件选项(macOS 用户应选择clang++而不是g++)。将选项卡从窗口底部的“调试控制台”切换到“终端” 。
如果终端包含文本“Hello, world!”,那么恭喜您,您刚刚运行了您的第一个 C++ 程序!
如果您在命令行上使用 g++
在这种情况下,您不需要创建项目。只需将以下内容粘贴到名为 HelloWorld.cpp 的文本文件中并保存文件:
#include <iostream>
int main()
{
std::cout << "Hello, world!";
return 0;
}
从命令行输入:
g++ -o HelloWorld HelloWorld.cpp
这将编译并链接 HelloWorld.cpp。要运行它,请输入:
HelloWorld
(或者可能./HelloWorld
),您将看到程序的输出。
如果您使用其他 IDE 或基于 Web 的编译器
您必须自己弄清楚如何执行以下操作:
- 创建控制台项目(仅限 IDE)
- 将 .cpp 文件添加到项目中(仅限 IDE,如果没有为您自动创建)
- 将以下代码粘贴到文件中:
#include <iostream>
int main()
{
std::cout << "Hello, world!";
return 0;
}
- 编译项目
- 运行项目
如果您的程序运行但控制台窗口闪烁并立即关闭
当控制台程序运行时,控制台窗口将打开,程序的任何输出都将写入控制台窗口。
当程序完成运行时,大多数现代 IDE 都会保持控制台打开(直到您按下某个键),以便您可以在继续之前检查程序的结果。然而,一些较旧的 IDE 会在程序运行完毕后自动关闭控制台窗口。这通常不是您想要的。
如果您的 IDE 自动关闭控制台窗口,可以使用以下两个步骤来确保控制台在程序结束时暂停。
首先,添加或确保以下行位于程序顶部附近:
#include <iostream>
#include <limits>
其次,在 main() 函数的末尾(就在 return 语句之前)添加以下代码:
std::cin.clear(); // reset any error flags
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignore any characters in the input buffer until we find a newline
std::cin.get(); // get one more char from the user (waits for user to press enter)
这将导致您的程序在继续之前等待用户按 Enter 键(您可能必须按 Enter 键两次),这将使您有时间在 IDE 关闭控制台窗口之前检查程序的输出。
其他解决方案(例如通常建议的system("pause")
解决方案)可能仅适用于某些操作系统,应避免使用。
如果控制台窗口根本没有打开,并且您的程序似乎没有运行,则您的防病毒软件或反恶意软件也可能会阻止程序的执行。如果是这种情况,请尝试暂时禁用扫描仪并查看问题是否解决,或者从扫描中排除项目目录。
如果您使用防病毒或反恶意软件,请考虑从扫描中排除您的项目目录,因为编译和调试可能会导致误报。
IDE 中的编译、构建、重建、清理和运行/启动选项之间有什么区别?
- 构建编译项目或工作区/解决方案中所有修改的代码文件,然后将目标文件链接到可执行文件。如果自上次构建以来没有修改任何代码文件,则此选项不会执行任何操作。
- Clean会删除所有缓存的对象和可执行文件,因此下次构建项目时,所有文件都将重新编译并生成新的可执行文件。
- 重建先进行“清理”,然后进行“构建”。
- 编译重新编译单个代码文件(无论之前是否已缓存)。此选项不会调用链接器或生成可执行文件。
- 运行/启动执行先前构建的可执行文件。某些 IDE(例如 Visual Studio)会在执行“运行”之前调用“构建”,以确保您运行的是最新版本的代码。否则(例如Code::Blocks)将只执行先前的可执行文件。
原创文章,作者:jkhxw,如若转载,请注明出处:https://www.jkhxw.com/compiling-your-first-program/