本章目标
- 【了解】C 语言的历史
- 【重点】熟练使用C 编写入门程序
- 【考点】C 程序的编译原理
- 【重点】掌握C 标准输入输出
- 【重点】掌握C 注释的使用
- 【了解】熟悉C 中的关键字
一、编程语言概述及C 简介
计算机不懂人类的语言,所以计算机程序必须用计算机可以使用的语言编写。目前有数百种编程语言,对于人们来说,开发他们使编程过程更加容易。
计算机的原生语言因计算机类型的不同而有差异,计算机的原生语言就是机器语言,是一套内嵌的原子指令集。因为这些指令都是以二进制代码的形式存在,为了以机器语言的形式给计算机发布指令,必须以二进制代码输入指令。如两位数的相加,必须写成下面的形式:
代码语言:javascript复制1101101010011010
使用机器语言编程非常乏味,且难以理解和修改。为此,在计算机的早期创建了汇编语言,作为机器语言的替代品。汇编语言使用短的描述性单词(助记符)来表示每一条机器指令。
如:add一般表示数字的相加,sub表示相减。将数字2和数字3相加得到结果:add 2, 3, result使用汇编语言比机器语言更加容易。但是使用仍然不够方便。汇编语言中的一条指令对应机器代码中的一条指令,用汇编语言写代码需要知道cpu是如何工作的。汇编语言被认为是低级语言,因为汇编语言本质上非常接近机器语言,并且与机器的类型相关。
1.2 高级编程语言
20世纪50年代,新一代编程语言就出现了。他们是平台独立的,这意味高级语言书写的程序可以在不同类型的计算机上运行,高级语言很像英语,易于学习和使用。
下面列举的高级语言,每种都是为特定的目的而设计的。
1.3 C 简介
C 诞生于20世纪80年代初(1983年),由贝尔实验室本贾尼·斯特劳斯特卢普博士及同事在C语言的基础上开发成功的。
C 保留了C语言原有的优点,并增加了面向对象的机制。(C 之父Bjame Stroustrup的个人网站:https://www.stroustrup.com/)
https://www.bilibili.com/video/av78862700 对他的采访
C 是目前世界上使用最广泛、最强大的语言之一,下图是作者本人对于C 的介绍:
1.4 C 的应用场景
纵观整个IT行业,C 程序员的工资水平和受尊敬水平总体比其他任何一门语言高。最基本的原因是C 的偏底层特性使得它可以开发出一些对系统性能要求很高又极其高端的产品。
也正是这一特点,使得C 成为程序员眼中公认的最难学习和掌握,并且学习成本最高的语言。基本上,我们电脑桌面上的主流应用程序,像QQ,迅雷,影音播放器,浏览器,杀毒软件,单机游戏等等都是用C 做的;在web领域搜索引擎还必须用C 做;在网络世界里,我们所玩过的一切网游皆是C 的杰作,其他语言还真不行。
打遍天下无敌手的 AlphaGo
我们之前看新闻知道Google的AlphaGo下围棋的水平已经是我们人类所达不到了。其背后也是用C 和神经网络编写的。在人工智能这个领域,Python和C 已经成为主流工具
在虚拟现实领域
虚拟现实(VR)是一种可以创建和体验虚拟世界的计算机仿真系统,是利用计算机生成的一种实时动态的三维立体逼真图像,结合VR眼镜,可以在观影、游戏、旅游活动、教学等方面给人一种完美的沉浸体验。C 在这一技术中同样扮演着重要的角色
在数字图像处理领域:比如**OpenCV** 视觉识别技术
在网络软件领域:C 拥有大量成熟的用于网络通信的库,ACE是其中最具有代表性的跨平台库,在许多重要的企业部门甚至是军方都有应用。
在科学计算领域:
在科学计算领域,FORTRAN是使用最多的语言之一。但是C 凭借先进的数值计算库、泛型编程等优势在这一领域也应用颇多。
在操作系统领域:
操作系统主要使用的编程语言是C,但是C 凭借其对C的兼容性,面向对象性质也开始在该领域有一席之地
在游戏开发领域
市面上相当多的游戏引擎都是基于c 开发的,比如Cocos2d、虚幻4等,这些游戏引擎的代表作有失落的方舟、绝地求生、地狱之刃、中国象棋、雷电传说、俄罗斯方块、保卫萝卜、捕鱼达人、开心消消乐等等。
在三维游戏领域
三维游戏领域的计算量是十分庞大的,底层的数学全都是矩阵变换,要想画面精美、内容丰富、游戏的实时高,这些高难度需求让我们只能选择C 语言。C语言是面向过程变成的,编写像游戏那样的大型软件很吃力,这时候C 就比C更适合编程。制作好莱坞大片的软件无一例外都是C 编写。这几年火爆的的VR领域,也是C 编程的天下。
1.5 C 常见发展方向
C 的几个常见的发展方向:客户端,游戏,服务端,嵌入式,移动端(移动只要是跨平台的移动端用C 写通用部分,GUI可以用平台特性,也可以用C 的跨平台框架)
针对界面UI方面C 的选择也是很多的,其实C 还是擅长“内功”的方面。如果你想带个GUI界面的话,也有很多类似Qt之类的框架和界面库可以使用,网上有很多,而且很多都跨平台,还开源,不管是 Windows,还是Mac,还是Linux,还是移动端平台,通吃的。本身C/C 就是跨平台的。
另外,大家感兴趣的,远程控制软件,什么木马、外挂等等,可以说95%以上都是用C/C 来写的。
1.6 C 和C语言的血缘关系
现在看来,C 和C语言虽然是两门独立的语言,但是它们却有着扯也扯不清的关系。
早期并没有“C ”这个名字,而是叫做“带类的C”。“带类的C”是作为C语言的一个扩展和补充出现的,它增加了很多新的语法,目的是提高开发效率,如果你有Java Web开发经验,那么你可以将它们的关系与 Servlet 和 JSP 的关系类比。
从“学院派”的角度来说,C 支持面向过程编程、面向对象编程和泛型编程,而C语言仅支持面向过程编程。就面向过程编程而言,C 和C几乎是一样的,所以学习了C语言,也就学习了C 的一半,不需要从头再来。
1.7 C 标准化
(1)C Foundations:https://isocpp.org/std/status
(2)开放标准网站(C Standards):http://www.open-std.org/JTC1/SC22/WG21/docs/standards#14882
官方正版:198瑞士法郎
- C 11标准草案N3242
- C 14标准草案N3797
- C 17标准草案N4659
- C 20标准草案N4849
二、开发第一个C 程序
2.1 HelloWorld
代码语言:javascript复制/**********************************************************
* 文件名称:HelloWorld.cpp
* 文件描述:演示C 第一个程序-在控制台输出一段字符串:Hello Word!
* 创建人员:老九学堂·窖头
* 创建日期:someday
* 修改人员:anyone
* 修改日期:someday
* 当前版本:1.0.0
**********************************************************/
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!n";
//return 0;表示程序正常结束,非0表示异常结束
return 0;
}
2.2 C 程序的编译执行过程(面试必考)
(1)预处理器处理所有的预处理指令:是将所有#include头文件的完整内容复制到.cpp文件中。
(2)编译器把每个.cpp文件(源文件)转换为.o或者.obj文件(对象文件):包含了源文件内容对应的机器码
(3)链接程序把程序的.obj文件合并到包含完整可程序程序的文件中(.exe)
*2.3 命令行下使用微软编译器理解编译和运行的机制
代码语言:javascript复制cl HelloWorld.cpp /c # 只编译,不链接
cl HelloWorld.obj /link # 链接生成 .exe 文件
cl HelloWorld.cpp # 编译、链接生成 .exe 文件
如果要使用微软编译器cl在控制台编译及链接C 程序,需要进行相关的配置:
注意:在不同操作系统或不同 VS 版本,示例路径可能会稍有不同
1、添加cl.exe的路径到环境变量path中
代码语言:javascript复制E:Program FilesMicrosoft Visual Studio2022EnterpriseVCToolsMSVC14.30.30705binHostx64x64
控制台键入cl命令,出现以下提示第一步配置成功:
现在如果直接执行cl HelloWorld.cpp会出现错误:“fatal error C1034: iostream: 不包括路径集”
所以需要继续配置include
2、在系统变量INCLUDE(大写;没有就自己创建)中添加以下路径:
代码语言:javascript复制E:Program FilesMicrosoft Visual Studio2022EnterpriseVCToolsMSVC14.30.30705include;
D:Windows Kits10Include10.0.19041.0shared;
D:Windows Kits10Include10.0.19041.0ucrt;
D:Windows Kits10Include10.0.19041.0um;
D:Windows Kits10Include10.0.19041.0winrt;
此时执行cl HelloWorld.cpp则会出现错误:fatal error LNK1104: 无法打开文件“libcpmt.lib”或者其他lib文件,继续步骤3
3、在系统变量LIB(大写;没有就自己创建)中添加以下路径:
代码语言:javascript复制E:Program FilesMicrosoft Visual Studio2022EnterpriseVCToolsMSVC14.30.30705libx64;
D:Windows Kits10Lib10.0.19041.0ucrtx64;
D:Windows Kits10Lib10.0.19041.0umx64;
4、在命令行中编译执行
2.4 在MinGW编译和执行C 程序
编译命令:
代码语言:javascript复制D:>mingw32-g -g -c demo.cpp -o demo.o
链接命令:
代码语言:javascript复制D:>mingw32-g -o demo.exe demo.o
执行命令:
代码语言:javascript复制D:>demo.exe
2.5 编码规范及注释
C 编码风格
- 每条语句占一行
- 每个函数都有一个开始和结束花括号,花括号各占一行
- 函数中的语句对相对于花括号进行缩进
- 与函数名称相关的小括号周围没有空白
书写注释是一个良好的编程习惯
- 有助于对代码的阅读
- 注释语言应准确、易懂、简洁
- 单行注释:以”//”开头
- 多行注释:以“/”开头,”/”结尾
2.6 转义序列
代码语言:javascript复制#include <iostream>
int main()
{
std::cout << "大吉大利n今晚吃鸡n";
std::cout << "大吉大利t今晚吃鸡n";
return 0;
}
2.7 C 中的关键字
1、C 98标准有74个关键字
2、C 11标准(C 14、17标准关键字不变):
新增10个关键字:alignas、alignof、char16_t、char32_t、constexpr 、decltype、noexcept、nullptr、static_assert、thread_local
3、C 20标准
新增8个关键字:char8_t、concept、consteval、constinit、co_await、co_return、co_yield、requires
2.8 Visual Studio常用快捷键
今日份分享到此结束!