C语言系统化精讲(二):C语言初探

2023-12-14 05:40:38

一、开发环境要求

① 选择电脑系统: 一台计算机是由主板、CPU、内存、磁盘、鼠标以及键盘等一大堆硬件组成,业界把这种只有硬件组成的计算机称为 裸机 这些硬件只能理解电信号,不能理解我们用户的语言,这时候就需要一个中间的媒介,来传达硬件能理解的指令,这样的平台,我们称之为操作系统。所以我们需要选择一个电脑系统。现如今,买电脑的时候卖家会默认给安装 Windows 系统,常见的 Windows 系统版本有:Windows7(现在已经很少了)、Windows10、Windows11(现在的新机一般默认安装的是Windows11)。在试用一段 Windows11 之后,发现笔者还是比较偏爱 Windows10,故后续所有的程序是在 Windows10 系统下编写运行的。

Windows10和Windows11大差不差,不影响我们学习程序开发
后续笔者还会显示如何安装Linux系统,以及如何在Linux系统上开发C语言程序,但考虑到大部分同学的基础,我还是会以Windows演示为主,有精力的同学可以了解一下Linux系统。

② 选择输入法: 本书是需要向电脑输入信息的,不能像手机一样触屏,所以需要一个电脑媒介来让我们用键盘输入信息,而这个媒介被称为 输入法。在百度中,搜索 输入法 三个字,就会出现很多输入法,例如:搜狗输入法、讯飞输入法、手心输入法等等,读者可以根据自己的喜爱下载输入法。笔者比较偏爱搜狗输入法,后续所有章节的代码都是采用搜狗输入法编写的。

补充:编程时请选择正确的输入法,严格区分中英文。 计算机起源于美国,C语言、C++、Java、JavaScript 等很多流行的编程语言都是美国人发明的,所以在编写代码的时候必须使用 英文半角输入法,尤其是标点符号, 初学者一定要引起注意。举例:

puts("万物皆C");

这里的括号、双引号、分号都必须是英文符号,而且是半角的。下图演示了如何将搜狗输入法切换到英文半角状态:
在这里插入图片描述
一些相似的中英文标点符号:

中文分号;和英文分号;
中文逗号,和英文逗号,
中文冒号:和英文冒号:
中文括号()和英文括号()
中文问号?和英文问号?
中文单引号‘ ’和英文单引号 ' '
中文双引号 “ ” 和英文双引号 " "

初学者请务必注意标点符号的问题,它们在视觉上的差别很小,一旦将英文符号写成中文符号就会导致错误,而且往往不容易发现。

拓展:全角和半角输入法的区别

全角和半角的区别主要在于除汉字以外的其它字符,比如标点符号、英文字母、阿拉伯数字等,全角字符和半角字符所占用的位置的大小不同。在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为 半角,相对地把一个汉字所占的位置称为 全角。标点符号、英文字母、阿拉伯数字等这些字符不同于汉字,在半角状态它们被作为英文字符处理,而在全角状态作为中文字符处理,请看下面的例子:
半角输入:万物皆C,I Like C!!!
在这里插入图片描述
全角输入:万物皆C,ILike C!!!
在这里插入图片描述
另外最重要的一点是:相同 字符在全角和半角状态下对应的编码值(例如 Unicode 编码、GBK 编码等)不一样,所以它们是不同的字符。

③ 选择开发环境: C语言诞生的时间比较早,所以它可以做到一次编写,处处编译,而且每个平台都有强大的编译器支持,也有强大的集成开发环境支持,例如 Windows 平台有微软的 Turbo c,Visual c++ 6.0,Dev-C++,Visual Studio IOS 平台有 XCode,Linux 平台有强大的 GCC 编译器。本文后续会介绍 Windows 平台的 VisualStudio2022 和 CLion 下的安装和使用过程,同时也会介绍 Linux 下开发环境的搭建。考虑到大多数同学的基础,本专栏后续所有的代码主要是以 Visual Studio 2022 编写程序。

二、常用开发环境

C 语言开发环境有很多种,有 Tubor C、Visual C++ 6.0 这种元老级别的软件,有由 Bloodshed 公司推出的 Dev-C++ 软件,还有目前备受欢迎的 Visual Studio 系列软件,它们都是可以编写 C 语言程序的。但是,上述这些软件都只能在 Windows 系统下安装。如果是 Linux 系统,可以通过下载 GCC 命令编写 C 程序。所以说,C 语言开发环境种类众多。接下来就来简单介绍下这几种开发环境。

1. Microsoft Visual Studio 2022

Microsoft Visual Studio (简称 VS)是美国微软公司的开发工具包系列产品。Visual Studio 是一个基本完整的开发工具集,用 Visual Studio 编写的代码适用于微软支持的所有平台。除了编写 C 语言,它还可以编写 C++、C#、ASP.NET 等语言。因此,Visual Studio 是目前最流行的 Windows 平台应用程序的集成开发环境。

2. Microsoft Visual C++ 6.0

Microsoft Visual C++6.0 (简称 VC、VC++、VC6) 也是微软公司的产品。Visual C++ 6.0 诞生在1998 年,与 Windows 系统一样,同样有标准版(Standard Edition)、专业版 (Professional Edition) 与企业版 (Enterprise Edition) 3 种,除此之外,它还分为英文版和中文版。Visual C++ 6.0 是微软公司最成功的产品之一,但现在微软已经不支持 Visual C++ 6.0,安装包无法在网上下载,而且 Visual C++ 6.0在 Windows7、Windows 8、Windows 10 系统下都存在兼容性问题,所以目前很少用 Visual C++ 6.0 来开发,取而代之的是微软公司推出的一系列 Visual Studio。

3.Turbo C

Turbo C (简称 TC) 是最常见的一种 C 语言的集成开发环境。Turbo C 的优点是它使用了一系列下拉式菜单,将文本编辑、程序编译、链接以及程序运行集于一身,并同时拥有图形库和文本窗口函数库。目前的 Turbo C 2.0 又增加了查错功能,还增设了仿真功能,这样就方便了程序的开发。Turbo C 的功能虽然很强大,但是也有弊端。它的弊端是不能使用鼠标控制,大家平常习惯于用鼠标,在 Turbo C 根本不受鼠标控制,这就给开发者带来了麻烦,因此 Turbo C 不受大家喜爱。

4. Dev-C++

Dev-C++ 是一种适合初学者使用的集成开发环境。它不需要安装环节,打开 dev-c++.exe 就可以直接使用。尽管如此,它也没有在商业级的软件开发中使用。Dev-C++ 刚开始是由 Bloodshed 公司推出的,不知什么原因在开发完 4.9.9.2 后停止开发,后来由 Orwell 公司继续更新开发,目前最新版本是 5.11 版。

5. Code::Block

Code::Block 是一个免费的跨平台 IDE,它支持 C、C++ 和 Fortan 程序的开发。Code::Block 的最大特点是它支持通过插件的方式对 IDE 自身功能进行扩展,这使得 Code::Block 具有很强的灵活性,方便用户使用。官网地址:https://www.codeblocks.org

6. CLion

CLion 是一款由 JetBrains 推出的跨平台 C/C++ 集成开发环境(IDE),它具有智能编辑器、CMake 构建支持、调试器、单元测试、代码分析等功能,可以极大提高 C/C++ 开发效率。官网地址:https://www.jetbrains.com/clion

7. Linux 系统 GCC 编译器

Linux 是 UNIX 的操作系统,GCC 是一个用于 Linux 系统下编程开发的自由编译器,GCC 最开始只是 C 语言的编译器,是 GNU C Compiler 的英文缩写。如今它已经包含众多语言的编译器,如 C、C++、Ada、Java 等,所以 GCC 也由原来的 GNU C Compiler 变为 GNU Compiler Collection。GCC 功能强大、性能优越、效率快,还可以在多种硬件平台上编译出可执行的超级编译器。

8. 可在线使用的工具:

CodingGround: https://tutorialspoint.com/compile_c_online.php
OnlineGDB: https://onlinegdb.com/online_c_compiler
Lightly:https://cde2f3ce.lightly.teamcode.com/

2.1 安装Visual Studio2022

社区版已经能够满足大多数开发需求,本小节将使用社区版—Visual Studio Community 2022。社区版对于单个开发人员、教室学习、学术研究、参与开源项目以及最多5个用户的非商业组织是免费的。这也是微软公司鼓励大家学习和参与开源项目的一种方式。Visual Studio 2022 社区版是完全免费的,其下载地址为:

https://visualstudio.microsoft.com/zh-hans/downloads/

浏览器打开网站 https://visualstudio.microsoft.com/zh-hans/downloads/,单击社区版下面的免费下载按钮,如下图所示:
在这里插入图片描述
安装 Visual Studio 2022 社区版的步骤如下:

Visual Studio 2022 社区版的安装文件是 exe 可执行文件,双击该文件开始安装。

说明:安装 Visual Studio 2022 开发环境时,计算机上要求必须安装了 .NET Framework 4.6 框架,如果没有安装,请先到 微软官方网站 下载并安装。注意:Windows10和Windows11 预先安装了 .NET Framework 4.6,因此无需安装此包。此包不适用于且不能安装到 Windows10 上
在这里插入图片描述

程序首先跳转到 Visual Studio 2022 安装程序界面,该界面中单击 继续 按钮,自动跳转到安装选择项界面,如下图所示,该界面主要将 使用 C++的桌面开发 这个复选框选中,其他的复选框,读者可以根据自己的开发需要确定是否选择安装;

注意: 在安装 Visual Studio 2022 开发环境时,选择 使用 C++ 的桌面开发 这一选项,可能会与笔者笔记的位置不同,读者一定要看清楚再勾选。选择完要安装的功能后,在下面 位置 处单击 更改... 按钮选择要安装的路径,这里建议不要安装在系统盘上,可以选择一个其他磁盘进行安装,设置完成后,单击 右下角的 安装 按钮,如下图所示:

如果你没有更改安装位置,则直接按照默认安装位置即可,安装位置的选择需要注意以下3点:

安装位置不能是根目录,必须在文件夹中保存软件。
安装位置必须是一个空文件夹。
Visual Studio IDE 和 下载缓存 的安装位置不能重叠。

注意:在安装 Visual Studio 2022 开发环境时,计算机一定要确保处于联网状态,否则无法正常安装。

完成上述勾选 使用 C++的桌面开发 这个复选框选以及设置安装位置两个步骤后,单击右下角的 安装 按钮,安装程序将开始。根据你的网络速度,安装过程可能需要一段时间。在这个时候,你可以喝杯水,休息一下,等待安装完成,Visual Studio 安装进度如下图所示:

看到下图的提示,表明 VS2022 已经安装成功,单击确定按钮,然后 重启 电脑,即可完成 Visual Studio 2022 的安装。

然后在 Windows 的 开始 找到 Visual studio 2022 的开发环境,如下图所示:

点击 Visual Studio 2022 ,如果是第一次打开 Visual studio 2022,会出现下图所示的界面:

如上图所示,你可以选择 暂时跳过此项。,但为了获得更好的使用体验,你需要注册一个微软账号。如果你已经有微软账号,则可以直接登录;如果没有,请先注册一个微软账号。这样你就可以完成软件的激活,并完成开发环境的搭建。笔者这里有微软账号,直接单击登录按钮。

进入到 Visual Studio 2022 环境的开发设置界面,如下图所示,开发设置选择 Visual C++,颜色根据自己喜欢的颜色,笔者选了浅色,最后单击 启动 Visual Studio 按钮

进入到 Visual Studio 2022 环境启动界面,等待几秒钟后,进入到 Visual Studio 2019 环境的欢迎界面,如下图所示:

2.2 安装mingw编译器和CLion

2.2.1 安装mingw编译器

mingw 编译器下载地址如下:

链接:https://pan.baidu.com/s/1Ca-z8MKLjdWFaPHdpfeHOg 
提取码:7ip7 
--来自百度网盘超级会员V9的分享

下载 mingw64.zip 压缩包,在 D 盘根目录新建一个文件夹 DevelopSoftware,将下载好的 mingw64.zip 压缩包放入 DevelopSoftware 文件夹中,如下图所示:

选中 mingw64.zip 压缩包,右键解压,如下图所示:

最后如下图所示:
在这里插入图片描述
ps:你也可以将安装包解压到自己熟悉的位置(初学者最好和我保持一致),不要放在含有中文或者空格的路径下。

2.2.2 下载、安装、启动CLion

打开网址:https://www.jetbrains.com.cn/clion/ 单击页面上的下载按钮,切换到如下界面:

下载完成后,可以看到在我本地桌面已经有下载好的 CLion 安装包,如下图所示:

安装 CLion 的步骤如下:

双击 CLion 安装包进行安装,将显示如下图所示的 当前无法访问 窗体,此处单击 运行 按钮即可:

在欢迎界面单击 Nex t按钮进入软件安装路径设置界面:

在软件安装路径设置界面,设置合理的安装路径。强烈建议不要把软件安装到操作系统所在的路径,否则当出现操作系统崩溃等特殊情况而必须重做操作系统时,CLion 程序路径下的程序将被破坏。CLion 默认的安装路径为操作系统所在的路径,建议更改,另外安装路径中建议不要包含中文字符与空白字符。我选择的安装路径为 D:\DevelopSoftware\CLion2023\,如下图所示。单击 Next 按钮,进入创建快捷方式界面:

勾选 Create Desktop ShortcutAdd "bin" folder to the PATH 左侧的复选框,如下图所示:

单击 Next> 按钮,进入选择开始菜单文件夹界面,如下图所示,该界面不用设置,采用默认即可,单击 Install 按钮:

安装大概5分钟左右,视自己电脑决定,请耐心等待,如下图所示:

安装完成后,选中 Reboot now 左侧的单选按钮,紧接着单击 Finish 按钮,结束安装,如下图所示:

启动 CLion: 运行 CLion 开发环境的步骤如下 (激活自己解决-某宝)

单击 CLion 桌面快捷方式 CLion 2023.2.1,启动 CLion 程序。选择是否导入开发环境配置文件,这里选择不导入,单击 OK 按钮,进入阅读协议页,如下图所示:
在这里插入图片描述
点击 New Project ,如下图所示:

点击 New Project 后,弹出下面窗口,图中的项目存储路径与项目名必须是英文的,不可含有中文,如果自己的用户名是中文的,可以在 D/E 盘新建一个文件夹,放项目!

点击 create 后会得到如下图所示效果:

2.3 Linux 开发环境搭建(新手不建议使用此种方式)

说明:这里为了方便后期的学习,本次采用的是 ubuntu-18.04 的操作系统

2.3.1 VMware Workstation Pro软件简介及安装

https://blog.csdn.net/xw1680/article/details/113635955

2.3.2 安装 Ubuntu 系统

全新安装可以参考文章:https://blog.csdn.net/xw1680/article/details/115434578 新手建议下面的安装方式

2.3.2.1 Ubuntu 下载

百度网盘:

链接:https://pan.baidu.com/s/1ewlex1T5VxNj2ei6OKtRVA 
提取码:m3wu 
--来自百度网盘超级会员V8的分享
2.3.2.2 安装 Ubuntu

将上述百度网盘中下载好的安装包进行解压,如下图所示:
在这里插入图片描述
接着打开安装好的 Vmware 软件,点击 文件-打开,如下图所示:
在这里插入图片描述
选择我们刚刚解压的 ubuntu-18.04 的路径,找到 Ubuntu 64.vmx,然后打开,如下图所示:

选中左侧的Ubuntu 64 位,点击开启此虚拟机,启动 ubuntu系统,如下图所示:

在启动过程中,会弹出如下对话框,选择 我已复制该虚拟机(P) 即可,
在这里插入图片描述
点击登录用户:
在这里插入图片描述
输入密码1,即可进入 Ubuntu 系统,如下图所示:
在这里插入图片描述
成功进入 Ubuntu 系统界面,如下图所示:
在这里插入图片描述

2.3.2.3 安装共享文件夹

说明:Ubuntu 系统想要和 Windows 之间传输文件等信息,可以通过设置共享文件夹来实现。

进入到 E:\Code\C_code 路径(路径自选)下,新建一个叫做 ubuntu_share 的文件夹,如下图所示:
在这里插入图片描述
打开 Vmware 软件后,点击 虚拟机–设置,如下图所示:



选中刚刚在 E:\Code\C_code 下新建的 ubuntu_share 文件夹,如下图所示:


最后回到 VMware 设置界面点击确定即可。

测试: 打开 VMware,进入 Ubuntu 系统中,找到 /mnt/hgfs/ubuntu_share 文件夹,新建文件夹 test_share 和 文件 hello.txt,如下图所示:


在 Windows 中查看,自动同步了,如下图所示:
在这里插入图片描述

三、概念介绍

3.1 源文件

在开发软件的过程中,我们需要将编写好的代码(Code)保存到一个文件中,这样代码才不会丢失,才能够被编译器找到,才能最终变成可执行文件。这种用来保存代码的文件就叫做 源文件(Source File)。

每种编程语言的源文件都有特定的后缀,以方便被编译器识别,被程序员理解。源文件后缀大都根据编程语言本身的名字来命名,例如:

  1. C语言源文件的后缀是 .c
  2. C++语言(C Plus Plus) 源文件的后缀是 .cpp
  3. Java 源文件的后缀是 .java
  4. Python 源文件的后缀是 .py
  5. JavaScript 源文件后缀是 .js

源文件其实就是纯文本文件,它的内部并没有特殊格式, 源文件的后缀仅仅是为了表明该文件中保存的是某种语言的代码(例如 .c 文件中保存的是C语言代码),这样程序员更加容易区分,编译器也更加容易识别,它并不会导致该文件的内部格式发生改变。

3.2 C语言编译和链接详解

我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有 .exe(比较常见).comsys 等;在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判断是否是可执行程序。可执行程序的内部是一系列计算机指令和数据的集合,它们都是二进制形式的,CPU 可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。例如,在屏幕上输出 VIP会员,C语言的写法为:

puts("VIP会员");

二进制的写法为:
在这里插入图片描述

在计算机发展的初期,程序员就是使用这样的二进制指令来编写程序的,那个拓荒的年代还没有编程语言。

直接使用二进制指令编程对程序员来说简直是噩梦,尤其是当程序比较大的时候,不但编写麻烦,需要频繁查询指令手册,而且出现错误时会异常苦恼,要直接面对一堆二进制数据,让人眼花缭乱。另外,用二进制指令编程步骤繁琐,要考虑各种边界情况和底层问题,开发效率十分低下。这就倒逼程序员开发出了编程语言,提高自己的生产力,例如汇编、C语言、C++、Java、Python、Go语言等,都是在逐步提高开发效率。

3.3 编译(Compile)

C语言代码由固定的词汇按照固定的格式组织起来,简单直观,程序员容易识别和理解,但是对于CPU,C语言代码就是天书,根本不认识,CPU 只认识几百个二进制形式的指令。这就需要一个工具,将C语言代码转换成 CPU 能够识别的二进制指令,也就是将代码加工成 .exe 程序的格式;这个工具是一个特殊的软件,叫做 编译器(Compiler)。

编译器能够识别代码中的词汇、句子以及各种特定的格式,并将他们转换成计算机能够识别的二进制形式,这个过程称为 编译(Compile)。 编译也可以理解为 翻译,类似于将中文翻译成英文、将英文翻译成象形文字,它是一个复杂的过程,大致包括词法分析、语法分析、语义分析、性能优化、生成可执行文件五个步骤,期间涉及到复杂的算法和硬件架构。对于学计算机或者软件的大学生,编译原理 是一门专业课程,有兴趣的请自行阅读《编译原理》一书。

C语言的编译器有很多种,不同的平台下有不同的编译器,例如:

  1. Windows 下常用的是微软开发的 Visual C++,它被集成在 Visual Studio 中,一般不单独使用
  2. Linux 下常用的是 GNU 组织开发的 GCC,很多 Linux 发行版都自带 GCC,详情:https://baike.baidu.com/item/gcc/17570?fr=aladdin
  3. Mac 下常用的是 LLVM/Clang,它被集成在 Xcode 中(Xcode 以前集成的是 GCC,后来由于 GCC 的不配合才改为 LLVM/Clang,LLVM/Clang 的性能比 GCC 更加强大)。

你的代码语法正确与否,编译器说了才算,我们学习C语言,从某种意义上说就是学习如何使用编译器。编译器可以 100% 保证你的代码从语法上讲是正确的,因为哪怕有一点小小的错误,编译也不能通过,编译器会告诉你哪里错了,便于你的更改。

3.4 链接(Link)

C语言代码经过编译以后,并没有生成最终的可执行文件(.exe 文件),而是生成了一种叫做目标文件(Object File) 的中间文件(或者说临时文件)。目标文件也是二进制形式的,它和可执行文件的格式是一样的。对于 Visual C++,目标文件的后缀是 .obj;对于 GCC,目标文件的后缀是 .o

目标文件经过链接(Link)以后才能变成可执行文件。既然目标文件和可执行文件的格式是一样的,为什么还要再链接一次呢,直接作为可执行文件不行吗?不行的!因为编译只是将我们自己写的代码变成了二进制形式,它还需要和系统组件(比如标准库、动态链接库等)结合起来,这些组件都是程序运行所必须的。链接(Link) 其实就是一个 打包 的过程,它将所有二进制形式的目标文件和系统组件组合成一个可执行文件。完成链接的过程也需要一个特殊的软件,叫做 链接器(Linker)。

随着学习的深入,我们编写的代码会越来越多,最终需要将它们分散到多个源文件中,编译器每次只能编译一个源文件,生成一个目标文件,这个时候,链接器除了将目标文件和系统组件组合起来,还需要将编译器生成的多个目标文件组合起来。再次强调,编译是针对一个源文件的,有多少个源文件就需要编译多少次,就会生成多少个目标文件。

总结:不管我们编写的代码有多么简单,都必须经过「编译 --> 链接」的过程才能生成可执行文件:
编译就是将我们编写的源代码 “翻译” 成计算机可以识别的二进制格式,它们以目标文件的形式存在;
链接就是一个 “打包” 的过程,它将所有的目标文件以及系统组件组合成一个可执行文件。

3.5 C语言编译器

对于当前主流桌面操作系统而言,可使用 Visual C++、GCC 以及 LLVM Clang 这三大编译器。Visual C++(简称 MSVC) 是由微软开发的,只能用于 Windows 操作系统;GCC 和 LLVM Clang 除了可用于 Windows 操作系统之外,主要用于 Unix/Linux 操作系统。现在很多版本的 Linux 都默认使用 GCC 作为C语言编译器,而像 FreeBSD、macOS 等系统默认使用 LLVM Clang 编译器。由于当前 LLVM 项目主要在 Apple 的主推下发展的,所以在 macOS中,Clang 编译器又被称为 Apple LLVM 编译器。

MSVC 编译器主要用于 Windows 操作系统平台下的应用程序开发,它不开源。用户可以使用 Visual Studio Community 版本来免费使用它,但是如果要把通过 Visual Studio Community 工具生成出来的应用进行商用,则需要好好阅读一下微软的许可证和说明书了。

而使用 GCC 与 Clang 编译器构建出来的应用一般没有任何限制,程序员可以将应用程序随意发布和进行商用。MSVC 编译器对 C99 标准的支持十分有限,直到发布 Visual Studio Community 2019,也才对 C11 和 C17 标准做了部分支持。 所幸的是,Visual Studio Community 2017 加入了对 Clang 编译器的支持,官方称之为——Clang with Microsoft CodeGen,当前版本基于的是 Clang 3.8。

C语言从诞生到现在,更新、迭代了多个版本,比如 C99、C11、C17 等。有关这些版本和它们之间的区别,后续会详细地介绍。也就是说,应用于 Visual Studio 集成开发环境中的 Clang 编译器前端可支持 Clang 编译器的所有语法特性,而后端生成的代码则与 MSVC 效果一样,包括像 long 整数类型在 64 位编译模式下长度仍然为 4 个字节。

而在嵌入式系统方面,可用的C语言编译器就非常丰富了,比如:

  1. 用于 Keil 公司 51 系列单片机的 Keil C51 编译器
  2. 当前大红大紫的 Arduino 板搭载的开发套件,可用针对 AVR 微控制器的 AVR GCC 编译器
  3. ARM 自己出的 ADS(ARM Development Suite)、RVDS(RealView Development Suite)和当前最新的 DS-5 Studio
  4. DSP 设计商 TI(Texas Instruments) 的 CCS(Code Composer Studio)
  5. DSP 设计商 ADI(Analog Devices,Inc.) 的 Visual DSP++ 编译器等等

通常,用于嵌入式系统开发的编译工具链都没有免费版本,而且一般需要通过国内代理进行购买。所以,这对于个人开发者或者嵌入式系统爱好者而言是一道不低的门槛。不过 Arduino 的开发套件是可免费下载使用的,并且用它做开发板连接调试也十分简单。Arduino 所采用的C编译器是基于 GCC 的。还有像 树莓派(Raspberry Pi) 这种迷你电脑可以直接使用 GCC 和 Clang 编译器。此外,还有像 nVidia 公司推出的 Jetson TK 系列开发板也可直接使用 GCC 和 Clang 编译器。树莓派与 Jetson TK 都默认安装了 Linux 操作系统。

在嵌入式领域,一般比较低端的单片机,比如 8 位的 MCU 所对应的C编译器可能只支持 C90 标准,有些甚至连 C90 标准的很多特性都不支持。因为它们一方面内存小,ROM 的容量也小;另一方面,本身处理器机能就十分有限,有些甚至无法支持函数指针,因为处理器本身不包含通过寄存器做间接过程调用的指令。而像 32 位处理器或 DSP,一般都至少能支持 C99 标准,它们本身的性能也十分强大。而像 ARM 出的 RVDS 编译器甚至可用 GNU 语法扩展。下图展示了上述C语言编译器的分类:
在这里插入图片描述

3.6 集成开发环境(IDE)

实际开发中,除了编译器是必须的工具,我们往往还需要很多其他辅助软件,例如:

  1. 编辑器:用来编写代码,并且给代码着色,以方便阅读
  2. 代码提示器:输入部分代码,即可提示全部代码,加速代码的编写过程,提高工作效率
  3. 调试器:观察程序的每一个运行步骤,发现程序的逻辑错误
  4. 项目管理工具:对程序涉及到的所有资源进行管理,包括源文件、图片、视频、第三方库等;
  5. 漂亮的界面:各种按钮、面板、菜单、窗口等控件整齐排布,操作更方便。

这些工具通常被打包在一起,统一发布和安装,例如 Visual Studio、Dev C++、Xcode、Visual C++ 6.0、C-Free、Code::Blocks 等,它们统称为 集成开发环境(IDE,Integrated Development Environment)。

集成开发环境就是一系列开发工具的组合套装。这就好比台式机,一个台式机的核心部件是主机,有了主机就能独立工作了,但是我们在购买台式机时,往往还要附带上显示器、键盘、鼠标、U盘、摄像头等外围设备,因为只有主机太不方便了,必须有外设才能玩的爽。集成开发环境也是这个道理,只有编译器不方便,所以还要增加其他的辅助工具。在实际开发中,肯定要使用集成开发环境,而不是单独地使用编译器。

3.7 工程/项目

一个真正的程序(也可以说软件)往往包含多项功能,每一项功能都需要几十行甚至几千行、几万行的代码来实现,如果我们将这些代码都放到一个源文件中,那将会让人崩溃,不但源文件打开速度极慢,代码的编写和维护也将变得非常困难。在实际开发中,我们都是将这些代码分门别类地放到多个源文件中。除了这些成千上万行的代码,一个程序往往还要包含图片、视频、音频、控件、库(也可以说框架)等其它资源,它们也都是一个一个地文件。

为了有效地管理这些种类繁杂、数目众多的文件,我们有理由把它们都放到一个目录(文件夹)下,并且这个目录下只存放与当前程序有关的资源。实际上 IDE 也是这么做的,它会为每一个程序都创建一个专门的目录,将用到的所有文件都集中到这个目录下,并对它们进行便捷的管理,比如重命名、删除文件、编辑文件等。这个为当前程序配备的专用文件夹,在 IDE 中也有一个专门的称呼,叫做 Project,翻译过来就是 工程 或者 项目。在 Visual C++ 6.0 下,这叫做一个 工程,而在 Visual Studio 下,这又叫做一个 项目,它们只是单词 Project 的不同翻译而已,实际上是一个概念。

工程类型/项目类型: 程序 是一个比较宽泛的称呼,它可以细分为很多种类,例如:
有的程序不带界面,完全是 黑屏 的,只能输入一些字符或者命令,称为 控制台程序(Console Application), 例如 Windows 下的 cmd.exe,Linux 或 Mac OS 下的终端(Terminal)。
有的程序带界面,看起来很漂亮,能够使用鼠标点击,称为 GUI程序(Graphical User Interface Program), 例如 QQ、迅雷、Chrome 等。有的程序不单独出现,而是作为其它程序的一个组成部分,普通用户很难接触到它们,例如静态库、动态库等。

不同的程序对应不同的工程类型(项目类型),使用 IDE 时必须选择正确的工程类型才能创建出我们想要的程序。换句话说,IDE 包含了多种工程类型,不同的工程类型会创建出不同的程序。不同的工程类型本质上是对 IDE 中各个参数的不同设置;我们也可以创建一个空白的工程类型,然后自己去设置各种参数(不过一般不这样做)。控制台程序对应的工程类型为 Win32控制台程序 (Win32 Console Application),GUI 程序对应的工程类型为 Win32程序 (Win32 Application)

控制台程序是 DOS 时代的产物了,它没有复杂的功能,没有漂亮的界面,只能看到一些文字,虽然枯燥无趣,也不实用,但是它非常简单,不受界面的干扰,所以适合入门,我强烈建议初学者从控制台程序学起。等大家对编程掌握的比较熟练了,能编写上百行的代码了,再慢慢过渡到 GUI 程序。

3.8 C语言的三套标准:C89、C99和C11

我们今天使用的 Windows、Linux、Mac OS 等操作系统都是由一种叫做 Unix 的系统演化而来。Unix 作为80年代主流的操作系统,是整个软件工业的基础,是现代操作系统的开山鼻祖,C语言就是为 Unix 而生的。Unix和C语言的开发者是同一人,名字叫 丹尼斯·里奇(Dennis MacAlistair Ritchie)。
在这里插入图片描述
C 语言的诞生:https://baike.baidu.com/item/c%E8%AF%AD%E8%A8%80/105958?fr=kg_general

C89 标准: 到了80年代,C语言越来越流行,广泛被业界使用,从大型主机到小型微机,各个厂商群雄并起,推出了多款C语言的编译器。这些编译器根据行业和厂商自己的需求,进行了各种扩展,C语言进入了春秋战国时代,逐渐演变成一个松散杂乱的大家族。为统一C语言版本,1983 年美国国家标准局(American National Standards Institute,简称 ANSI) 成立了一个委员会,专门来制定C语言标准。1989 年C语言标准被批准,被称为 ANSI X3.159-1989 Programming Language C。这个版本的C语言标准通常被称为 ANSI C。又由于这个版本是 89 年完成制定的,因此也被称为 C89。后来 ANSI 把这个标准提交到 ISO(国际化标准组织),1990 年被 ISO 采纳为国际标准,称为 ISO C。又因为这个版本是1990年发布的,因此也被称为 C90。ANSI C(C89) 与 ISO C(C90) 内容基本相同,主要是格式组织不一样。因为 ANSI 与 ISO 的C标准内容基本相同,所以对于C标准,可以称为 ANSI C,也可以说是 ISO C,或者 ANSI / ISO C。以后大家看到 ANSI C、ISO C、C89、C90,要知道这些标准的内容都是一样的。目前常用的编译器,例如微软编译器、GCC、LLVM/Clang 等,都能很好地支持 ANSI C 的内容。

C99 标准: 在 ANSI C 标准确立之后,C语言的规范在很长一段时间内都没有大的变动。1995 年C程序设计语言工作组对C语言进行了一些修改,增加了新的关键字,编写了新的库,取消了原有的限制,并于 1999 年形成新的标准—— ISO/IEC 9899:1999 标准, 通常被成为 C99。但是这个时候的C语言编译器基本已经成熟,各个组织对 C99 的支持所表现出来的兴趣不同。当 GCC 和其它一些商业编译器支持 C99 的大部分特性的时候,微软和 Borland 却似乎对此不感兴趣,或者说没有足够的资源和动力来改进编译器,最终导致不同的编译器在部分语法上存在差异。例如,ANSI C 规定,局部变量要在函数开头定义,而 C99 取消了这个限制,变量可以在任意位置定义,我们将在后续的学习中进行详细地介绍。

C11 标准: C11 标准由国际标准化组织(ISO)和国际电工委员会(IEC)旗下的C语言标准委员会于 2011 年底正式发布,支持此标准的主流C语言编译器有 GCC、LLVM/Clang、Intel C++ Compile 等。C11 标准主要增加了以下内容:

增加了安全函数,例如 gets_s()、fopen_s() 等
增加了 <threads.h> 头文件以支持多线程
增加了 <uchar.h> 头文件以支持 Unicode 字符集, 以及其它一些细节

通过上述 C语言的三套标准:C89、C99和C11 的介绍可以发现,C语言并没有一个官方机构,也不属于哪个公司,它只有一个制定标准的委员会,任何其他组织或者个人都可以开发C语言的编译器,而这个编译器要遵守哪个C语言标准,是 100% 遵守还是部分遵守,并没有强制性的措施,也没有任何约束。

换句话说,各个厂商可以为了自己的利益、根据自己的喜好来开发编译器。

这就导致了一个棘手的问题,有的编译器遵守较新的C语言标准,有的编译器只能遵守较老的C语言标准,有的编译器还进行了很多扩展。比如:GCC、LLVM/Clang 更新非常及时,能够支持最新的 C11 标准(前提是你得使用最新版的编译器)。微软编译器更新比较缓慢,迟迟不能支持新标准,例如 VC 6.0、VS2010 都在使用 C89 标准,VS2015 部分支持 C99 标准(其他版本的VS没有测试)。微软官方给出的答复是,最新的标准已经在 C++ 中支持了,C语言就没必要再重复了。

初学者经常会遇到这种情况,有些代码在微软编译器下能够正常运行,拿到 GCC 下就不行了,一堆报错信息;或者反过来,在 GCC 上能运行的代码在微软编译器下不能运行。这是因为不同的编译器支持不同的标准,并且每个编译器都进行了自己的扩展,假如你使用了微软编译器私有的扩展函数,那么拿到 GCC 下肯定是不支持的。

3.9 程序安装是怎么回事

大部分软件都需要先安装才能使用,例如 QQ、360、迅雷等,要先从网上下载一个安装包,然后安装到计算机的C盘或者D盘等。大部分程序还会在开始菜单或者桌面上生成一个快捷方式,用户只要点击快捷方式,就可以启动软件。不同的操作系统,安装软件的方法虽然不一样,但基本原理是相同的,主要的思想就是将程序的二进制可执行文件拷贝到某个目录,设置一些路径。如果程序运行时需要一些库,将这些库拷贝到系统目录即可。程序的安装基本上要经过下面四个步骤:

  1. 将程序的可执行文件从安装包所在的位置,拷贝到要安装的目录。安装程序的时候,程序会给用户指定一个默认的安装目录,如果用户需要,也可以自定义安装,改变安装目录。一般所谓的 绿色软件 到此就安装结束了,可以使用了。
  2. 如果有必要,可以向系统目录拷贝一些动态链接库(DLL)。(可选操作) 有的程序,比如大型游戏,可能需要很多动态链接库(DLL)的支持,这时候程序可能会将这些 DLL 拷贝到系统库的默认目录,Windows 下在 C:\Windows\System32\ 会看到很多 DLL 文件。有些程序用到的 DLL 文件不是系统必需的,只能由程序自己使用,这样放在系统目录里就不太合适,安装的软件多了,就会造成系统臃肿,所以这些 DLL 会被拷贝到程序的安装目录。
    在这里插入图片描述
  3. 向系统注册表中写入相应的设置项,注册程序或者库的安装信息。(可选操作) 安装前,用户可能会对软件做一些设置,安装时,这些设置就会被写入注册表。另外,当安装程序将 DLL 文件拷贝到系统目录时,一些 DLL 还需要向系统注册,告诉系统我在这里,不然使用的时候可能会找不到。
  4. 在开始菜单或者桌面上位程序创建快捷方式。(可选操作) 创建快捷方式主要是为了用户使用方便,有了快捷方式,就不用再到安装目录去启动程序了。由此可见,程序在安装前后并没有什么区别,只不过是进行了一些设置,有的设置是程序运行所必须的,有的是为了让用户更加方便。

四、第一个C语言程序

4.1 Visual Studio2022开发环境介绍

1. 创建项目

初期学习 C 语言编程主要在 Windows 控制台应用程序环境下完成,下面将按步骤介绍控制台应用程序的创建过程。步骤如下:

(1) 选择开始 ? 所有程序 ? Visual Studio 2022,进入 Visual Studio 2022 开发环境起始页,单击创建新项目,如下图所示:

(2) 在创建新项目对话框中选择空项目 ? 下一步 选项,如下图所示:

(3) 在配置新项目对话框中选择要创建的文件夹类型,选择创建文件操作的过程如下图所示:

在上面的 项目名称 文本框中输入要创建的文件夹名称,这里笔者输入的名称为 Dome。在 位置 文本框处设置文件夹的保存地址,可以通过单击右边的 ... 按钮修改源文件的存储位置。

(4) 自动跳转到下图所示的界面:
在这里插入图片描述
(5) 选择 解决方案资源管理器 中的 源文件 ,单击鼠标右键,选择 添加 中的 新建项 ,如下图所示。或者使用快捷键 Ctrl + Shift + A,进入添加项目界面。
在这里插入图片描述
(6) 完成步骤 (5) 就会自动跳转到如下图所示的添加新项界面(这是一个紧凑视图):
在这里插入图片描述
你也可以,单击 左下方的显示所有模板(T) 按钮展开所有的模板,如下图所示:

添加项目时首先选择 Visual C++ 选项,这时在右侧列表框中显示可以创建的不同文件。因为要创建 C 文件,因此这里选择 c++ 文件(.cpp) 选项。然后在下方的 名称 文本框中输入要创建的 C 文件名称,这里笔者输入的名称为 Dome.c位置 文本框是文件夹的保存地址,这里默认是在步骤 (3) 创建的文件夹位置,不作更改。如下图所示:

读者可以自行选择 紧凑视图所有模板 方式进行创建。说明: 因为软件只提供了 C++ 文件 这个选项,但并不影响 C 语言代码编写,Visual Studio 可以同时兼容 C++ 和 C 语言代码。

注意:因为要创建的是 C 源文件,所以在文本框中要将默认的扩展名 .cpp 改为 .c。例如创建名称为 Dome 的 C 源文件,那么应该在文本框中显示 Dome.c。

(7) 单击 添加 按钮,这样就添加了一个 C 文件,如下图所示:
在这里插入图片描述
2. 菜单栏

菜单栏显示了所有可用的 Visual Studio 2022 命令,除了文件、编辑、视图、窗口和帮助菜单之外,还提供编程专用的功能菜单,其中包括项目、生成、调试、工具和测试等功能,如下图所示的菜单栏:
在这里插入图片描述
每个菜单项中都包含若干个菜单命令,用于执行不同的操作。例如,调试菜单包括调试程序的各种命令,如开始调试、开始执行、新建断点等,如下图所示:

3. 工具栏

为了让操作更方便快捷,将菜单项中常用的命令按功能分组分别放入相应的工具栏中,就可以通过工具栏快速地访问常用的菜单命令。常用的工具栏有标准工具栏和调试工具栏两种,下面分别进行介绍。

(1) 上面所示的工具栏,它包括大多数常用的命令按钮,如新建项目、添加新项、打开文件、保存、全部保存等。标准工具栏如图所示。
在这里插入图片描述
(2) 在环境中点击 本地 Windows 调试器 按钮,就会在工具栏的右侧出现调试工具栏,它包括对应用程序进行调试的快捷按钮。

4. 解决方案资源管理器

解决方案资源管理器 (如上面所示的左侧资源管理器),它提供了项目及文件的视图,并提供了对项目和文件相关命令的便捷访问功能。与此窗口关联的工具栏提供了适用于列表中突出显示项的常用命令。若要访问解决方案资源管理器,选择菜单栏中的视图 ? 解决方案资源管理器即可打开。

5. 选项窗口

选项 窗口可以对环境进行设置,选择菜单栏中的 工具 ? 选项,就能打开下图所示的 选项 窗口,可以在这里设置开发环境主题等。

6. 错误输出窗口

错误输出窗口为代码中的错误提供了即时的提示和可能的解决方法。例如,在某句代码结束处忘记输入分号,错误列表中会显示下图所示的错误。错误列表就好像是一个错误提示器,它可以将程序中的错误代码及时的显示给开发人员,并通过提示信息找到相应的错误代码。
在这里插入图片描述

4.2 使用Visual Studio2022开发C程序

我们首先来设计一个简单的C程序,这个程序只展示C程序的一些基本特性。请先阅读此程序,看自己是否能明白该程序的功能,如果不是很懂,也没关系,接下来的小节会一一解释每行代码的功能。简单的C程序代码如下所示:

学习编程的目的就是开发程序,让自己成为牛人。那么,本节就利用一个小程序来介绍开发一个 C 程序的过程,让你真真正正感受到 C 语言程序开发的魅力和价值。C 程序开发步骤如下图所示:
在这里插入图片描述
(1) 第 1 步: 定义程序的目标。 本程序设计的目标是在控制台输出电影相关的文字信息,输出效果如下图所示:
在这里插入图片描述
(2) 第 2 步:设计程序。 设计本程序的流程如下所示:

用户 --> 主函数 --> 输出电影相关的文字信息 --> 程序结束

(3) 第 3 步:编写代码。 程序的基本功能已经设计完成,接下来就是按照设定的功能编写代码。接下来在 Visual Studio 2022 工程文件中输入如下代码:

#include<stdio.h>                                     //包含头文件
int main()                                            //主函数
{
	printf("\n");                                     //输出换行符
	printf("*************************************\n");//输出星号*
	printf("*  经典电影:《阿甘正传》           *\n");//输出电影名称
	printf("*  导  演:罗伯特·泽米吉斯         *\n");//输出导演
	printf("*  主  演:汤姆·汉克斯、罗宾·怀特 *\n");//输出主演
	printf("*************************************\n");//输出星号*
	return 0;                                         //程序结束
}

按照之前创建项目步骤完成一个新项目的创建,将上面的代码写到 Dome.c 文件中,然后按快捷键 Ctrl +S 进行保存。输入代码就是打字,如果打字内容是英文字母那就需要注意了,输入代码对输入法是有要求的,输入法需要是英文半角字符格式(在之前已经讲解过)。 如下图所示:
在这里插入图片描述
(4) 第 4 步:编译程序。

(1)方法一:在 Visual Studio 2022 菜单栏上选择 生成,就会出现下拉栏,最下面有一个 编译 选项,如下图所示:

(2)方法二:使用快捷键 Ctrl+F7 编译程序。

如果编译程序之后,在输出空间的位置输出图中的 生成: 1 成功,0 失败,0 最新,0 已跳过 内容就表示编译成功。
在这里插入图片描述
(5) 第 5 步:运行程序。

(1) 在 Visual Studio 2022 中菜单栏上选择调试,在下拉栏中选择 开始执行(不调试) 选项(或使用快捷键 Ctrl+F5),如下图所示:
在这里插入图片描述
(2) 运行程序,输出结果如下图所示:
在这里插入图片描述

4.3 程序分析师

在这里插入图片描述
上述代码中五颜六色的边边框框组成了C语言的代码,就像在盖房子的过程中,需要先搭建一个整体框架,才能继续向其中添砖加瓦,现在就将为大家分别介绍C语言程序中的各个部分。

  1. 头文件:即包含函数库。就像一个五金工具箱,我们拥有一个五金工具箱,才能使用这个箱子里的工具,而代码中的 #include<stdio.h> 含义就是我们拥有这个 stdio.h 工具箱。
  2. 主函数:即程序的入口。就像房间的入口门,任何东西进入此房间必须从入口门进入,而 main 在程序中就担任这个 的责任。主函数又名函数头。
  3. 函数体:即函数的身体。就像大雁,五脏六腑都在大雁的身体内,才能让这个生命体生存。而程序的函数体也同样可以包含C语言的各种语句。
  4. 关键字:即程序中蓝色字。C语言代码中必不可少的组成部分,被赋予特殊用途的单词(在程序中会显示为特殊字体)。
  5. 注释:即代码的翻译,为了方便程序的阅读和理解。

至此今天的学习就到此结束了,笔者在这里声明,笔者写文章只是为了学习交流,以及让更多学习C语言的读者少走一些弯路,节省时间,并不用做其他用途,如有侵权,联系博主删除即可。感谢您阅读本篇博文,希望本文能成为您编程路上的领航者。祝您阅读愉快!


在这里插入图片描述

????好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
????如果我的博客对你有帮助、如果你喜欢我的博客内容,请 点赞评论收藏 一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
?编码不易,大家的支持就是我坚持下去的动力。点赞后不要忘了 关注 我哦!

文章来源:https://blog.csdn.net/xw1680/article/details/134002680
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。