C语言摸爬滚打-C语言基础知识介绍
牛马哥之前也是自学C/C++,然后也在大学里面上过课,这次想正式地系统性再学一遍复习一遍。
一、优点
每个东西的history很重要,C语言也不例外。1972年,在贝尔实验室里(对,就是那个发明电话的那个)丹尼斯里奇和肯汤普逊在捣鼓UNIX系统的时候,捣鼓出了C语言。当然也是有B语言的影子在的,甚至在此基础上设计的,因为B语言就是那个汤普逊大哥发明的。
(1)牛马哥接触了这么多门语言,还是C语言最高效,也嘎嘎最累。很多学硬件的兄弟懂的,如果自己重新写一些协议啥的,都是很麻烦。但是也突出了C语言的自由度是其他语言不可比拟的,高效且灵活。同时 C 语言所产生的代码运行速度与汇编语言编写的代码运行速度几乎一样。
(2)可移植性好也是很重要的一点,在不同的系统中一样的C语言程序基本上可以不用修改的,要么只是修改程序的头文件。主要是在大部分计算机结构中都可以使用C编译器(后面会将,可以理解为翻译C语言变成机器码的程序)
(3)够底层,虽然咱C语言不能和汇编比较,程序员可以利用C语言进行硬件的位操作,能使劲在寄存器、内存等里面整活。
二、编译器是啥
百度是这么描述的:“编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。”
大家肯定也很好奇我们写的C语言程序,计算机怎么会看的懂呢。对,没错计算机里面偷藏了一个小人,这个小人看我们的C语言程序,然后再操控电脑发出指令。这个little man就是C编译器,他将我们的C语言(高级语言)翻译成汇编语言(低级语言)。
稍微简单介绍一下汇编语言,这个就是机器码,电脑能看的懂得语言,就是很多很多串数字,程序员看起非常非常晦涩,而且非常非常繁琐,做一个小操作都要很多步骤。所以程序员才要用高级语言,能看懂的语言最好。
C编译器就扮演一个翻译的角色。但是不同的CPU的机器语言是不一样的,就是所不是所有电脑都是讲同一种机器语言的,所以说要找到与之匹配的C编译器才行。下图是一个用不同人类语言的对比。
像主流桌面的C编译器有Visual C++、gcc等。vc大家学c语言的时候肯定用过,主要用在windows上。gcc主要是用在大多数类Unix操作系统。还有嵌入式开发的C编译器如keil5
三、C标准库是啥(语言标准)
大家都知道什么东西都有一个版本迭代的过程,C语言过去这么多个年头,肯定也有很多版本和标准,所以我们慢慢梳理。
1978年,Brian Kernighan 和 Dennis Ritchie一起写了一本书叫《The C Programming Language》,被公认为第一版的C标准,也叫K&R C。那个时候的K&R C和现在的C语言差别很大,有兴趣的话可以去了解了解。但是那个时候只定义了C语言,没有定义C标准库。
感觉C语言很好用之后,后人发现需要一套更加完善的标准。所以从1983年开始,美国的ANSI开发了一套标准,叫ANSI C,于1989年公布,有定义C语言和C标准库。后来有人觉得不行啊,不能让老美当大哥,C语言是大家的。所以国际标准化组织(ISO)开发了ISO C,其实和ANSI C是一个东西,双方相互借鉴。所以ANSI C和ISO C通常都叫C89或者C90,命名是C加年份的。
在1999年,C语言的标准化委员会又不断地对C语言进行改进,公布了C99;在2011年公布了C11;
如果有需要C11标准文档的:https://www.aliyundrive.com/s/tfjPAgpvSXC 提取码:99en
所以C标准库是C标准的具体实现,让开发者能使用统一的函数和数据结构,让开发者在规定的范围里“行动”,比如就是只能使用printf()来打印,其实就是相当于提供最基础的api接口给程序员,学到其他语言你就会慢慢感悟到这些东西,初学者不要在这方面钻牛角尖。我们可以在C程序中引用这些标准库,如下
#include <stdio.h> //我们使用#include来引用头文件,<stdio.h>这个头文件就是包含在标准库中的
当然标准库中不同的头文件能提供不同的基础功能,如下表列举的一些常用的头文件
头文件 | 功能 |
---|---|
stdio.h | 输入输出的功能 |
stdlib.h | 很多杂功能 |
string.h | 字符串功能 |
math.h | 数学功能 |
time.h | 时间日期功能 |
后续还会介绍一些初学者不了解的知识点,欢迎大家批评指正。