学C++_第0章 引言/指南_0.7 编译你的首个程序
梅冠华-2019-05-21
翻译自C++学习网站 learncpp(www.learncpp.com) 第0章 第7节
https://www.learncpp.com/cpp-tutorial/writing-your-first-program/
0.7 编译你的首个程序
在咱们能够编写我们的首个程序之前,咱们需要学习下如何在咱们的集成开发环境(IDE)中创建新程序。本次课,我们将讲述如何去做这事儿,而且你要编译和运行你的首个程序哦!
工程(Projects)
为了在IDE中编写C++程序,一开始,我们通常需要创建一个新的工程(我们很快将会展示给你如何干这事儿)。一个工程是一个容器,装载着所有你的源代码文件、图片、数据文件,等……这些需要生成一个可执行文件(以便你来运行或使用它们)的东西。工程同时也同时保存了多种IDE、编译器、链接器的设置,以及记载你的停止位置,以便当你之后再次打开该工程时,IDE的状态能够被恢复到你离开时的状态。当你选择编译你的程序,该工程中所有的.cpp文件都会被编译和链接。
每个工程对应着一个程序。当你决定创建第二个程序时,你要么需要去创建一个新工程,要么去覆盖在已有工程中的代码(如果你不想保留它们的话)。工程文件通常是IDE所指定的,所以某个IDE创建的工程,对于另一个IDE而言,需要重新创建。
最佳做法
为你写的每个新程序创建一个新工程
控制台工程(Console projects)
当你创建新工程时,你通常会被问到你要创建一个什么类型的工程。在该教程中我们将创建的所有工程都是控制台工程(console projects)。控制台工程的意思是我们将创建的程序能被运行在windows、linux、或mac控制台上。
这儿有个Windows控制台的截屏:
默认情况下,控制台应用没有图像用户界面(GUI),其输出文字到屏幕上,从键盘读取输入,并且编译成单独的可执行文件。这对于学习C++来说很完美,因为它将复杂性保留到了最小状态,同时确保在非常宽泛的系统中所有东西皆可正常工作。
别担心,即便你之前从未用过控制台,或者是不知道如何学习它。我们将会通过我们的IDE来编译和逐步搞定我们的程序(控制台将会在需要的时候有所涉及)。
工作空间 / 解决方案 (Workspaces / solutions)
当你为你的程序创建了一个崭新的工程时,许多IDE会自动地把你的工程添加到一个“工作空间(workspace)”或“解决方案(solution)”(名称依据IDE不同而不同)。工作空间或解决方案是一个容器,用来承载一个或多个相关的工程。例如,当你写游戏程序时,想要对于单人游戏和多人游戏有单独的可执行文件,那么你需要创建两个工程。把这些工程弄的完全独立是毫无意义的 —— 毕竟,它们只是同一个游戏的不同部分。大多数时候,在一个工作空间/解决方案中它们每个将被配置为一个单独的工程。
纵然你可以在一个解决方案中添加多个工程,然而我们通常建议对每个程序创建一个新的工作空间或解决方案,尤其是在学习阶段。这更为简便,而且不太会出现问题。
编写你的第一个程序
传统上来讲,程序员用新语言写的首个程序是著名的hello world程序,而且我们不准备去剥夺你那样的经历!你随后会非常感谢我们,也许吧。
警告
从此次课开始,你将会看到许多C++代码的例子。这些例子中的大部分看起来是这个样子的:
#include <iostream>
int main()
{
std::cout << "Hello, world!";
return 0;
}
如果你用你的鼠标选择这些例子中的代码,并且随后复制/粘贴到你的IDE中,你也许同样有这些行标号(依据你如何选择的)。如果是这样的话,那么在你编译之前,你需要手动移除这些行号。
在Visual Studio 2019中创建一个工程
当你打开Visual Studio 2019后,你将看到如下对话框:
选择 Create a new project。
你将看到如下对话框:
如果你已经打开了一个较早的工程(这时候你想创建一个新工程的话),那么你可以通过File menu > New > Project来打开上述对话框。
选择Windows Desktop Wizard并且点击Next。如果你看不到这个,那么在你安装Visual Studio的时候,你可能忘记选择安装Desktop development with C++ workload。此时,返回到课程0.6 – 安装一个集成开发环境,并且按照指导来重新安装你的Visual Studio。(注意:不需要完全重新安装,你可以运行Visual Studio安装程序,并且修改你已有的安装来添加C++ workload。)
接下来,你会看到如下对话框:
将已有的工程名字(Project name)更换为HelloWorld。
建议勾选Place solution and project in the same directory(将solution和project放在相同文件夹中),因为这样做会减少在每个工程中创建的子文件夹数目。
点击Create继续。
最终,你会看到一个最后的对话框:
确保Application type是设置为了Console Application (.exe),而且Precomplied Header选项没有勾选,然后点击OK。
现在你已经创建了一个工程!跳到下面的 Visual Studio Solution Explorer 部分继续。
在Visual Studio 2017或更老版本上创建一个工程
为了在Visual Studio 2017或更老版本上创建一个工程,用File menu > New > Project。弹出的对话框是这个样子的:
首先,确保Visual C++在左侧列出来了。如果你看不到Visual C++,那么在你安装Visual Studio时你可能忘了选择安装Desktop development with C++ workload。此时,返回到课程0.6 – 安装一个集成开发环境,并且按照指导来重新安装你的Visual Studio。(注意:不需要完全重新安装,你可以运行Visual Studio安装程序,并且修改你已有的安装来添加C++ workload。)
如果你使用的是Visual Studio 2017 v15.3或较新版本,在Visual C++下面,选择Windows Desktop,并且在主窗口中选择Windows Desktop Wizard。
如果你没看到Windows Desktop选项,你可能使用的是老版本的Visual Studio,那也很好啊。在主窗口中选择Win32或者Win32 Console Application就好了。
在下面的Name栏,输入你程序的名字(将现有名字替换成HelloWorld)。在Location栏,你可以为你的工程选择一个不同的放置位置,这会儿用默认的就很好了。
点击OK,如果你使用老版本的Visual Studio,将会跳出Win32 Application Wizard,点击Next即可。
到这会儿,你将会看到如下的wizard对话框(老版本的Visual Studio使用不同的样式,但是同样有大多数选项):
确保你没勾选Precomplied Header
然后点击OK或Finish,现在你的工程创建好啦!
Visual Studio解决方案资源管理器(Visual Studio Solution Explorer)
在窗口的左边或右边,你应该能看到一个名为Solution Explorer的窗口。在该窗口内部,Visual Studio已经给你创建了一个解决方案(解决方案‘HelloWorld’)。在那儿,用黑体显示的名字,是你的新工程(HelloWorld)。在该工程下面,Visual Studio已经给你创建了一系列文件,包含HelloWorld.cpp(就在Sorce Files树里面)。你也能看到其他.cpp或.h文件,这会你不用太在意它们是什么。
在文本编辑器中,你将看到Visual Studio已经打开了HelloWorld.cpp而且创建了一些代码给你。选择并删除所有的代码,然后键入/复制如下的代码到你的计算机上:
#include <iostream>
int main()
{
std::cout << "Hello, world!";
return 0;
}
若要编译你的程序,要么按下F7(如果没反应的话,试试Ctrl + Shift + B),要么用Build menu > Build Solution。如果一切正常,你将会看到如下东西呈现在Output窗口中:
1>------ Build started: Project: HelloWorld, Configuration: Debug Win32 ------
1>HelloWorld.cpp
1>HelloWorld.vcxproj -> c:\users\alex\documents\visual studio 2017\Projects\HelloWorld\Debug\HelloWorld.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
这表明你的编译是成功的!
Q:我出现了error C1010(“fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add ‘#include “stdafx.h”’ to your source?”). 这是啥玩意儿?
当你创建你的工程时,你忘了关掉precompiled headers。重新创建你的工程(按照上面的指示来做),并且确保关掉precompiled headers。
若要运行你编译好的程序,按下ctrl + F5,或者到Debug菜单中选择Start Without Debugging。你将会看到如下东西:
这就是你程序的结果!恭喜,你已经编译而且运行了你的首个程序!
在Code::Blocks中创建工程
若要创建一个新工程,去到File menu > New > Project。对话框将跳出来,如下所示:
选择Console application,点击Go (或 Create) 按钮。
如果你看见console application wizard对话框,点击Next,确保C++选上了,再次按下Next。
现在你会被问到如何命名你的工程。给工程起名为HelloWorld。你可以依据你的想法把它保存到任何地方去,尽管我们建议你将其保存到C盘中的一个子文件夹中,例如C:\CBProjects。
你会碰到另一个对话框,问你想要如何配置。默认就很好了,所以选择Finish就好。
现在你的新工程已经被创建了起来。
在屏幕的左边,你将会看到管理窗口,而且Projects标签是选中的。在该窗口下面,你将会看到一个Workspace文件夹,其中有你的HelloWorld工程。
在HelloWorld工程中,展开源文件夹,双击“main.cpp”。你将会看到一个hello world程序已经给你写好了!
把它替换成如下的代码:
#include <iostream>
int main()
{
std::cout << "Hello, world!";
return 0;
}
若要构建你的工程,按下ctrl + F9,或者用Build menu > Build。如果一切正常,你将会看到如下东西出现在Build log窗口:
-------------- Build: Debug in HelloWorld (compiler: GNU GCC Compiler)---------------
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
Output file is bin\Debug\HelloWorld.exe with size 1.51 MB
Process terminated with status 0 (0 minute(s), 0 second(s))
0 error(s), 0 warning(s) (0 minute(s), 0 second(s))
这表明你的编译是成功的!
若要运行你编译好的程序,按下ctrl + F10,或者用Build menu > Run。你将会看到如下相似的呈现:
这便是你程序的运行结果。
Linux用户
Linux用户可能需要安装额外的软件包才能让Code::Blocks编译。请参考在第0.6节 – 安装一个集成开发环境(IDE)中的Code::Blocks安装指南来获取更多信息。
如果你在命令行方式下使用g++
这种情况下,你无需创建一个新的工程。只需要简单地把如下代码粘贴到文本文件中并且命名为HelloWorld.cpp,保存它就好了:
#include <iostream>
int main()
{
std::cout << "Hello, world!";
return 0;
}
在命令行中,键入:
g++ -o HelloWorld HelloWorld.cpp
这将编译和链接HelloWorld.cpp。如要运行它,键入:
HelloWorld
或者可能是
./HelloWorld
那么你将会看到你程序的输出结果。
如果你使用其它IDEs或者是基于网络的编译器
你将不得不靠自个儿琢磨出如何做如下操作:
- 创建一个console project(仅对IDEs)
- 添加一个.cpp文件到工程(仅对IDEs,如果没有自动给你创建的话)
- 将如下代码粘贴到文件中:
#include <iostream>
int main()
{
std::cout << "Hello, world!";
return 0;
}
- 编译工程
- 运行工程
如果编译失败
没关系,来个深呼吸。我们能处理好它。????
首先,看看编译器给你提供的错误信息。多数情况下,它包含了行号,指出哪一行是错误所在。检查那一行以及附近行的代码,确保没有打字、排版或是拼写错误,还要注意别把行号粘到你代码里去了。
其次,看看第8节 – 一些常见的C++问题中的Q&A,因为你的问题很有可能在那里有所提及。
再次,读读下面的评论 – 一些人可能会遇到同样的问题。
最后,如果上面都失败了,试试在Google上搜索你的错误信息。有可能有人碰到这个问题而且琢磨出了修复它的法子。
如果你的程序运行了但是窗口闪了下瞬间就关掉了
某些编译器(例如Bloodshed的Dev C++)在程序运行完之后不会自动停止在控制台屏幕上。你的程序运行了,但是输出窗口关掉了,以至于你来不及看到结果。
如果你的编译器有这种情况,采用如下两步来修复该问题:
首先,添加或是确保如下行代码是在你程序的最上部(Visual Studio用户,确保这些行出现在 #include “pch.h” 或 #include "stdafx.h"后面,如果有的话):
#include <iostream>
#include <limits>
然后,在mian()函数的最后添加如下代码(刚好就在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 an enter character
std::cin.get(); // get one more char from the user
这将让你的程序在继续之前需要等待用户来按下一个键,这给了你时间去检查你的程序输出,在你的编译器关闭控制台窗口之前。
其他的解决方法,比如经常推荐使用的system(“pause”)方法可能仅仅适用于某些操作系统,所以就不再讲解了。
你的反病毒或反恶意软件也可能阻断程序的执行。如果那样子的话,试着暂时关闭你的扫描器看看问题是否解决了。
Visual Studio用户
Visual Studio在console application的最后不会暂停,如果其运行在debugging模式下(Debug Menu > Start Debugging)。若你想要暂停,你要么可以用上面的代码来实现,要么让你的程序不运行在debugging模式下(Debug Menu > Start Without Debugging)。
总结
恭喜,你通过了本教程中最难的部分(安装IDE和编译你的首个程序)!
不用担心,如果你不理解在Hello World程序中不同行是什么个意思。我们将会在下一章的开始再来看它们并且详细讲解每一行的意义。
梅冠华-2019-05-21
翻译自C++学习网站 learncpp(www.learncpp.com) 第0章 第7节
https://www.learncpp.com/cpp-tutorial/writing-your-first-program/