本节书摘来自华章计算机《C语言编程魔法书:基于C11标准》一书中的第3章,第3.1节,作者 陈轶,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
第3章
C语言编程的环境搭建
我们在第2章讲述了学习C语言所必需的一些预备知识。本章将给大家介绍常用桌面操作系统下的C语言环境搭建。这里所讲述的C语言编译器以及集成开发环境(IDE)都是可合法免费下载的,本书不鼓励各位使用盗版或破解软件,所以下面会列出下载这些合法免费软件的官方链接,大家把编程环境搭建完之后即可上机实践编程。
3.1 Windows操作系统下搭建C语言编程环境
Windows操作系统下默认不自带任何C语言编译器,大家必须从网上下载自己所需要的C语言编译器。如果各位想通过C语言开发Windows系统平台相关的应用,或者主要想在Windows平台对C语言程序进行调试,那么往往首选Visual Studio Community。这款开发环境是免费的,里面自带了微软自家的C语言编译器——简称为MSVC。不过当前MSVC无法支持最新的C11标准新特性,而且即便是C99标准也是支持得比较有限,所以它并不适合学习C11最新标准。但对于C语言初学者而言,这款集成开发环境还是非常适合的。幸运的是,2017年3月微软最新推出的Visual Studio Community 2017包含了Clang编译器前端工具,如果我们勾选安装的话即可使用Clang来作为C语言编译器。尽管Visual Studio下的Clang编译器尚处于试验阶段,但大部分功能都可用了。目前笔者测试下来,它对原子操作还没支持好,另外像UTF-8、UTF-16等字符编码问题还与Windows操作系统本身相关,所以要涉及这些问题的话,我们只能使用系统特定的接口去解决或者使用下面提到的MinGW以及Clang官方提供的编译工具链去解决。
所以,如果大家想在Windows操作系统下学习更为完整的C11标准最新特性,那么建议下载MinGW,如果是64位的Windows系统的话则最好下载Mingw-w64。如果还想学习Clang编译器语法扩展的话,也可以再下载单独的Clang编译器。
3.1.1 安装Visual Studio Community 2017
Visual Studio Community最新版本可在微软的Visual Studio官方网站下载:
https://www.visualstudio.com/thank-you-downloading-visual-studio/?sku=Community&rel=15。
当我们下载好Visual Studio Community的安装程序之后,将它打开运行。随后会看到一个选择安装组件的对话框。我们在该对话框的右侧能看到已经勾选上的组件以及一些没有勾选上的组件。这里我们必须勾选上“Clang/C2(实验)”这一项,如图3-1所示。因为不安装Clang,后面就无法用它编译C源代码。
安装完成之后,我们打开Visual Studio Community 2017,首先出现欢迎界面。Visual Studio在首次启动时就会很明显地提示我们注册账号或用账号登录。我们先用Hotmail或MSN账号登录注册,如果不注册仅有30天左右的试用时间,但一旦注册完之后就能永久使用了。我们登录完自己的账号之后就可以开始新建一个C语言的项目工程了。
我们找到菜单栏最左边的“文件”,然后选择“新建”,再点击“项目”,如图3-2所示。
随后我们会看到新建项目的对话框。在左侧边栏中找到“Visual C++”,然后选中“Win32”,随后在中间栏选择“Win32 Console Application”,最后,在底下输入此工程创建后存放的目录路径以及工程名,如图3-3所示。
点击“OK”按钮后进入应用设置向导界面,如图3-4所示。
我们看到图3-4这个界面时,先别着急点击“下一步”按钮,应先点击左边边栏中的“应用程序设置”,对此进行初步配置。然后进入图3-5所示的界面。
图3-5所示的界面中,在“附加选项”中,先取消勾选“预编译头”,然后勾选“空项目”。最后,点击“完成”按钮进入到我们所创建的cdemo项目工程的主界面。此时,整个工程是空的,只有文件夹而没有任何文件,需要手工新建C源文件。用鼠标右键单击“源文件”,选择“添加”,然后再点击“新建项”,如图3-6所示。
在随后弹出的如图3-7所示的对话框中,选中中间栏中的“C++文件(.cpp)”那一项,然后在底下“名称”一栏输入源文件名。
注意: 这里需要注意,默认文件后缀名是.cpp,即C++源文件,因为Visual C++默认采用C++编程语言,因此我们这里要手工填写.c文件后缀名,使得后续我们用C编译器进行编译构建整个控制台应用。
完成之后,我们点击“添加”按钮,然后再次进入工程主界面,此时即可看到C源文件的编辑界面了。
我们在进入源文件编辑界面后,先对Visual Studio的文本编辑选项做些处理,以便于我们后续可以流畅地编写代码。如图3-8所示,我们在上面的菜单栏找到“工具”,然后选择“选项”。
点击进入后能看到如图3-9所示的对话框。在左边栏找到“文本编辑器”这个选项,然后将它展开,选中“所有语言”,随后我们勾选上“行号”,这样,在编辑每个文本文件时都能看到行号,便于我们查找代码中的语法错误以及调试代码用。
最后,再选中“制表符”选项,对制表符进行设置,如图3-10所示。习惯上,我们一般将Tab Size设置为4个半角字符,缩进大小也是4个半角字符,然后每个制表符用4个空格代替,这样用其他编辑器浏览Visual Studio编辑过的源文件也不会导致格式错乱。
接下来我们设置当前的项目工程的属性选项。我们找到菜单栏的“项目”,然后点击“cdemo属性”,如图3-11所示。
在配置界面的常规页面中(见图3-12),先找到左上角的“配置”选项,选择“所有配置”。这样,我们后续做的所有配置都对Debug模式与Release模式同时有效。然后,在右侧找到“平台工具集”,这里需要选择使用“Visual Studio 2017-Clang with Microsoft CodeGen”,这个选项使得我们对当前的项目工程使用Clang编译工具链进行编译构建。
随后我们展开C/C++这一项,此时仍然需要先将左上角的“配置”设置为“所有配置”。然后找到“语言”,将“C语言标准”设置为GNU11标准。这样我们就能在Visual Studio Community集成开发环境下编写调试大部分基于GNU11标准的C语言代码了。设置如图3-13所示。
全都设置完成之后,我们就可以编写第一个C语言程序了。同一般C语言教程一样,我们这里也通过输出一个“Hello, world!”字样,作为第一个C语言代码的演示程序。我们输入图3-14中所示的代码,然后点击工具栏中的绿色三角箭头(图3-14中用矩形框圈出)即可编译运行了。在程序最后的getchar()作用在于:弹出的控制台应用不会在程序终止时马上自动关闭,而是等用户输入一个回车时再关闭。
在图3-14所示的界面中,椭圆圈出来的部分用于设置当前程序以调试模式构建还是以发布模式构建。如果以调试模式构建,我们可以利用Visual Studio内建的调试器做断点跟踪,查看局部对象与全局对象状态以及寄存器状态等,便于调试程序。如果以发布模式构建,那么当前程序会被大幅优化,使得程序运行性能大幅提升,但难以调试。图3-14中,中间用矩形框圈出的部分是设置当前目标程序的执行模式,默认为x86,即32位执行模式。这里我们将它设置成了64位执行模式。
3.1.2 安装MinGW编译器
MinGW编译器是著名开源C语言编译器GCC对Windows操作系统的一个移植版本。通过MinGW,我们就可以在Windows下享用大部分GCC编译器所带来的强大功能了。这对跨平台的C语言开发而言十分有用。下面我们就来介绍如何下载安装MinGW编译器。
首先,我们直接进入这个网址下载安装文件:http://sourceforge.net/projects/mingw/f?iles/latest/download?source=f?iles 。这个文件非常小,因为MinGW采用的是在线安装模式,萃取线上各个最新release版本的组件进行下载。
然后,我们双击安装包,初步安装完毕后弹出对话框如图3-15所示。绿色进度条表示已经安装好了。
我们点击“Continue”按钮后,出现选择安装更多组件的对话框。我们在左侧栏点击“Basic”,即采用基本安装。然后,在右侧栏安装上全部列出的组件。要选中某个安装组件,鼠标右键该包名,然后在快捷菜单中选择“Mark for Installation”命令,如图3-16所示。
全都选择好之后,我们最后更新刚选好的安装包。我们在菜单栏选中“Installation”,然后点击“Update Catalogue”,如图3-17所示。
之后会弹出如图3-18所示的界面,点击最左边的“Review Changes”按钮,会弹出如图3-19所示的对话框。
点击“Apply”按钮之后,就会下载安装设置更新后的安装包。等待全都安装完毕后,点击“Close”按钮,退出整个安装程序。
安装结束后,不要着急使用,而是先将MinGW的bin文件夹注册到环境变量中。先打开“文件资源管理器”,在左侧栏中找到“此电脑”或“我的电脑”,鼠标右键单击它,选择“属性”,进入后点击左侧的“高级系统设置”,如图3-20所示。
进入图3-20的对话框之后,点击“环境变量”按钮,进入到“环境变量”对话框。我们在“系统变量”区域选中“Path”变量,然后点击“编辑”按钮,弹出“编辑系统变量”对话框。在“变量值”中往后添加刚才安装后的MinGW中的bin文件夹所在目录。在环境变量中的每个值之间用半角分号“;”进行分隔,如图3-21所示。
完成之后,我们就可以打开控制台程序(方法是右键桌面上左下角“开始”按钮,然后选择命令提示符),然后进入要编译的C源文件所在的目录。然后用gcc命令对指定C源文件进行编译构建,如图3-22所示。
这里,我们借用之前在Visual Studio Community下编辑好的源文件test.c。我们先用cd命令定位到test.c所在的目录。然后用gcc --version命令查看当前GCC编译器的版本。最后,用gcc -std=gnu11 test.c进行编译,最终在当前目录生成a.exe可执行文件。我们直接键入a,回车,即可看到程序输出结果。
要注意的是,MinGW是32位的C语言编译器,所以它构建出来的程序也是32位的。如果各位用的Windows操作系统是64位的,那么可以使用Mingw-w64编译器。下载地址如下:https://sourceforge.net/projects/mingw-w64/f?iles/latest/download?source=f?iles。
Mingw-w64的安装、设置过程与32位的MinGW类似,这里不再赘述。
3.1.3 安装LLVM Clang编译器
LLVM(Low Level Virtual Machine)起源于一个大学项目,它是一个编译器基础架构项目,用于设计一组具有良好定义的、可重用的库。LLVM起先用于替代GCC(这里的GCC是指GNU Compiler Collection)栈中的代码生成器,然后对GCC中已有的许多编译器进行修改以适配LLVM。后来LLVM发起了开发一个全新的适用于不少编程语言的编译器前端,称为Clang。Clang主要支持C、C++、Objective-C等编程语言,并且主要由Apple公司大力支持和维护。LLVM与Clang都基于BSD许可证,比GPL更宽松。正因如此,现在许多硬件商都逐渐开始投入对LLVM的支持,像Khronos开放标准组织也基于LLVM IR(Intermediate Representation)开发出了自己的一套SPIR-V。Clang编译器在语法上力争支持各大主流编译器的语法扩展,包括GCC和MSVC,所以微软也已经把Clang纳入Visual Studio集成开发环境的工具集中。
我们首先在LLVM Clang官网下载最新稳定发布版本的Clang安装包:http://llvm.org/releases/download.html 。然后,要注意的是选择32位版本,如图3-23所示。
由于Clang主要是一个编译器前端,因此它需要依赖其他编译器的连接器以及某些运行时库。所以,我们光安装Clang是无法直接成功构建应用程序的,因而我们要使用Clang的话,必须在此之前先把MinGW安装好。MinGW是32位的,因此为了二进制兼容,我们所选取的Clang也必须是32位的。当然,如果之前安装的是64位的MingW-W64,那么这里需要下载安装64位的Clang。
安装Clang的过程非常简单,可根据安装向导简单地做些选择即可完成安装。安装完成后,可以去“系统”里的环境变量中看,把LLVM目录下的bin文件夹的路径添加到Path环境变量中,如图3-24所示。然后就可以再次使用命令行工具直接编译运行程序了。