《C语言编程魔法书:基于C11标准》——第3章 C语言编程的环境搭建 3.1 Windows操作系统下搭建C语言编程环境

简介:

本节书摘来自华章计算机《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源代码。


image

安装完成之后,我们打开Visual Studio Community 2017,首先出现欢迎界面。Visual Studio在首次启动时就会很明显地提示我们注册账号或用账号登录。我们先用Hotmail或MSN账号登录注册,如果不注册仅有30天左右的试用时间,但一旦注册完之后就能永久使用了。我们登录完自己的账号之后就可以开始新建一个C语言的项目工程了。

我们找到菜单栏最左边的“文件”,然后选择“新建”,再点击“项目”,如图3-2所示。

image

随后我们会看到新建项目的对话框。在左侧边栏中找到“Visual C++”,然后选中“Win32”,随后在中间栏选择“Win32 Console Application”,最后,在底下输入此工程创建后存放的目录路径以及工程名,如图3-3所示。

image

点击“OK”按钮后进入应用设置向导界面,如图3-4所示。

我们看到图3-4这个界面时,先别着急点击“下一步”按钮,应先点击左边边栏中的“应用程序设置”,对此进行初步配置。然后进入图3-5所示的界面。
   
image

图3-5所示的界面中,在“附加选项”中,先取消勾选“预编译头”,然后勾选“空项目”。最后,点击“完成”按钮进入到我们所创建的cdemo项目工程的主界面。此时,整个工程是空的,只有文件夹而没有任何文件,需要手工新建C源文件。用鼠标右键单击“源文件”,选择“添加”,然后再点击“新建项”,如图3-6所示。

image

在随后弹出的如图3-7所示的对话框中,选中中间栏中的“C++文件(.cpp)”那一项,然后在底下“名称”一栏输入源文件名。

image

注意: 这里需要注意,默认文件后缀名是.cpp,即C++源文件,因为Visual C++默认采用C++编程语言,因此我们这里要手工填写.c文件后缀名,使得后续我们用C编译器进行编译构建整个控制台应用。

完成之后,我们点击“添加”按钮,然后再次进入工程主界面,此时即可看到C源文件的编辑界面了。

我们在进入源文件编辑界面后,先对Visual Studio的文本编辑选项做些处理,以便于我们后续可以流畅地编写代码。如图3-8所示,我们在上面的菜单栏找到“工具”,然后选择“选项”。

image

点击进入后能看到如图3-9所示的对话框。在左边栏找到“文本编辑器”这个选项,然后将它展开,选中“所有语言”,随后我们勾选上“行号”,这样,在编辑每个文本文件时都能看到行号,便于我们查找代码中的语法错误以及调试代码用。

image

最后,再选中“制表符”选项,对制表符进行设置,如图3-10所示。习惯上,我们一般将Tab Size设置为4个半角字符,缩进大小也是4个半角字符,然后每个制表符用4个空格代替,这样用其他编辑器浏览Visual Studio编辑过的源文件也不会导致格式错乱。

image

接下来我们设置当前的项目工程的属性选项。我们找到菜单栏的“项目”,然后点击“cdemo属性”,如图3-11所示。


image

在配置界面的常规页面中(见图3-12),先找到左上角的“配置”选项,选择“所有配置”。这样,我们后续做的所有配置都对Debug模式与Release模式同时有效。然后,在右侧找到“平台工具集”,这里需要选择使用“Visual Studio 2017-Clang with Microsoft CodeGen”,这个选项使得我们对当前的项目工程使用Clang编译工具链进行编译构建。

image

随后我们展开C/C++这一项,此时仍然需要先将左上角的“配置”设置为“所有配置”。然后找到“语言”,将“C语言标准”设置为GNU11标准。这样我们就能在Visual Studio Community集成开发环境下编写调试大部分基于GNU11标准的C语言代码了。设置如图3-13所示。

image

全都设置完成之后,我们就可以编写第一个C语言程序了。同一般C语言教程一样,我们这里也通过输出一个“Hello, world!”字样,作为第一个C语言代码的演示程序。我们输入图3-14中所示的代码,然后点击工具栏中的绿色三角箭头(图3-14中用矩形框圈出)即可编译运行了。在程序最后的getchar()作用在于:弹出的控制台应用不会在程序终止时马上自动关闭,而是等用户输入一个回车时再关闭。

image

在图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所示。绿色进度条表示已经安装好了。

image

我们点击“Continue”按钮后,出现选择安装更多组件的对话框。我们在左侧栏点击“Basic”,即采用基本安装。然后,在右侧栏安装上全部列出的组件。要选中某个安装组件,鼠标右键该包名,然后在快捷菜单中选择“Mark for Installation”命令,如图3-16所示。

image

全都选择好之后,我们最后更新刚选好的安装包。我们在菜单栏选中“Installation”,然后点击“Update Catalogue”,如图3-17所示。

image

之后会弹出如图3-18所示的界面,点击最左边的“Review Changes”按钮,会弹出如图3-19所示的对话框。

image

点击“Apply”按钮之后,就会下载安装设置更新后的安装包。等待全都安装完毕后,点击“Close”按钮,退出整个安装程序。

image

安装结束后,不要着急使用,而是先将MinGW的bin文件夹注册到环境变量中。先打开“文件资源管理器”,在左侧栏中找到“此电脑”或“我的电脑”,鼠标右键单击它,选择“属性”,进入后点击左侧的“高级系统设置”,如图3-20所示。

image

进入图3-20的对话框之后,点击“环境变量”按钮,进入到“环境变量”对话框。我们在“系统变量”区域选中“Path”变量,然后点击“编辑”按钮,弹出“编辑系统变量”对话框。在“变量值”中往后添加刚才安装后的MinGW中的bin文件夹所在目录。在环境变量中的每个值之间用半角分号“;”进行分隔,如图3-21所示。


image

完成之后,我们就可以打开控制台程序(方法是右键桌面上左下角“开始”按钮,然后选择命令提示符),然后进入要编译的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集成开发环境的工具集中。

image

我们首先在LLVM Clang官网下载最新稳定发布版本的Clang安装包:http://llvm.org/releases/download.html 。然后,要注意的是选择32位版本,如图3-23所示。


image

由于Clang主要是一个编译器前端,因此它需要依赖其他编译器的连接器以及某些运行时库。所以,我们光安装Clang是无法直接成功构建应用程序的,因而我们要使用Clang的话,必须在此之前先把MinGW安装好。MinGW是32位的,因此为了二进制兼容,我们所选取的Clang也必须是32位的。当然,如果之前安装的是64位的MingW-W64,那么这里需要下载安装64位的Clang。

安装Clang的过程非常简单,可根据安装向导简单地做些选择即可完成安装。安装完成后,可以去“系统”里的环境变量中看,把LLVM目录下的bin文件夹的路径添加到Path环境变量中,如图3-24所示。然后就可以再次使用命令行工具直接编译运行程序了。

image

相关文章
|
2月前
|
Unix 编译器 Shell
[oeasy]python0033_先有操作系统还是先有编程语言_c语言是怎么来的
本文回顾了计算机语言与操作系统的起源,探讨了早期 Unix 操作系统及其与 C 语言的相互促进发展。Unix 最初用汇编语言编写,运行在 PDP-7 上,后来 Thompson 和 Ritchie 开发了 C 语言及编译器,使 Unix 重写并成功编译。1974 年 Ritchie 发表论文,Unix 开始被学术界关注,并逐渐普及。伯克利分校也在此过程中发挥了重要作用,推动了 Unix 和 C 语言的广泛传播。
61 9
[oeasy]python0033_先有操作系统还是先有编程语言_c语言是怎么来的
|
1月前
|
NoSQL C语言 索引
十二个C语言新手编程时常犯的错误及解决方式
C语言初学者常遇错误包括语法错误、未初始化变量、数组越界、指针错误、函数声明与定义不匹配、忘记包含头文件、格式化字符串错误、忘记返回值、内存泄漏、逻辑错误、字符串未正确终止及递归无退出条件。解决方法涉及仔细检查代码、初始化变量、确保索引有效、正确使用指针与格式化字符串、包含必要头文件、使用调试工具跟踪逻辑、避免内存泄漏及确保递归有基准情况。利用调试器、编写注释及查阅资料也有助于提高编程效率。避免这些错误可使代码更稳定、高效。
216 12
|
1月前
|
Linux C语言 iOS开发
MacOS环境-手写操作系统-06-在mac下通过交叉编译:C语言结合汇编
MacOS环境-手写操作系统-06-在mac下通过交叉编译:C语言结合汇编
19 0
|
2月前
|
Linux C语言
C语言 多进程编程(三)信号处理方式和自定义处理函数
本文详细介绍了Linux系统中进程间通信的关键机制——信号。首先解释了信号作为一种异步通知机制的特点及其主要来源,接着列举了常见的信号类型及其定义。文章进一步探讨了信号的处理流程和Linux中处理信号的方式,包括忽略信号、捕捉信号以及执行默认操作。此外,通过具体示例演示了如何创建子进程并通过信号进行控制。最后,讲解了如何通过`signal`函数自定义信号处理函数,并提供了完整的示例代码,展示了父子进程之间通过信号进行通信的过程。
|
2月前
|
Linux C语言
C语言 多进程编程(四)定时器信号和子进程退出信号
本文详细介绍了Linux系统中的定时器信号及其相关函数。首先,文章解释了`SIGALRM`信号的作用及应用场景,包括计时器、超时重试和定时任务等。接着介绍了`alarm()`函数,展示了如何设置定时器以及其局限性。随后探讨了`setitimer()`函数,比较了它与`alarm()`的不同之处,包括定时器类型、精度和支持的定时器数量等方面。最后,文章讲解了子进程退出时如何利用`SIGCHLD`信号,提供了示例代码展示如何处理子进程退出信号,避免僵尸进程问题。
|
2月前
|
消息中间件 Unix Linux
C语言 多进程编程(五)消息队列
本文介绍了Linux系统中多进程通信之消息队列的使用方法。首先通过`ftok()`函数生成消息队列的唯一ID,然后使用`msgget()`创建消息队列,并通过`msgctl()`进行操作,如删除队列。接着,通过`msgsnd()`函数发送消息到消息队列,使用`msgrcv()`函数从队列中接收消息。文章提供了详细的函数原型、参数说明及示例代码,帮助读者理解和应用消息队列进行进程间通信。
|
2月前
|
缓存 Linux C语言
C语言 多进程编程(六)共享内存
本文介绍了Linux系统下的多进程通信机制——共享内存的使用方法。首先详细讲解了如何通过`shmget()`函数创建共享内存,并提供了示例代码。接着介绍了如何利用`shmctl()`函数删除共享内存。随后,文章解释了共享内存映射的概念及其实现方法,包括使用`shmat()`函数进行映射以及使用`shmdt()`函数解除映射,并给出了相应的示例代码。最后,展示了如何在共享内存中读写数据的具体操作流程。
|
2月前
|
Linux C语言
C语言 多进程编程(七)信号量
本文档详细介绍了进程间通信中的信号量机制。首先解释了资源竞争、临界资源和临界区的概念,并重点阐述了信号量如何解决这些问题。信号量作为一种协调共享资源访问的机制,包括互斥和同步两方面。文档还详细描述了无名信号量的初始化、等待、释放及销毁等操作,并提供了相应的 C 语言示例代码。此外,还介绍了如何创建信号量集合、初始化信号量以及信号量的操作方法。最后,通过实际示例展示了信号量在进程互斥和同步中的应用,包括如何使用信号量避免资源竞争,并实现了父子进程间的同步输出。附带的 `sem.h` 和 `sem.c` 文件提供了信号量操作的具体实现。
|
3月前
|
Java 应用服务中间件 Windows
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
|
3月前
|
并行计算 TensorFlow 算法框架/工具
Windows11+CUDA12.0+RTX4090如何配置安装Tensorflow2-GPU环境?
本文介绍了如何在Windows 11操作系统上,配合CUDA 12.0和RTX4090显卡,通过创建conda环境、安装特定版本的CUDA、cuDNN和TensorFlow 2.10来配置TensorFlow GPU环境,并提供了解决可能遇到的cudnn库文件找不到错误的具体步骤。
374 3

热门文章

最新文章