1 前言
嵌入式物联网基础课程之一的C语言,作为一门常青树的编程语言,它依旧活跃在互联网与通信领域的各个行业。随着新能源等新兴行业的崛起,C语言的重要性愈发凸显。因此,掌握C语言成了必备的基础,跟着职创未来的脚本,我们一起加油,一起努力。
从本文开始,我们将分一系列文章,全面讲述关于C语言的方方面面;无论你是职场精英还是大学校园小白,跟上我们的脚本,一定能成为一名合格的嵌入式物联网工程师。
2 C语言简介
1.1 C语言发展历
C语言的发展史可以追溯到20世纪60年代,它起源于一种更早的高级编程语言Agol 60。随后,剑桥大学的研究人员在此基础上发展出了CPL语言,进而简化为BCPL语言。在这个过程中,C语言的前身逐渐浮出水面。
1978年,丹尼斯·里奇(Dennis Ritchie)与布莱恩·科尔尼(Brian Kernighan)合作出版了著名的《The C Programming Language》一书,该书对C语言的标准和规范进行了详细的阐述,使得C语言成为了最为广泛流传的编程语言之一。
C语言主要发展历程包括:
-
1972年C语⾔在贝尔实验室诞⽣. 丹尼斯·里奇 参考B语言开发。
-
1970-80年代,C语言被⼴泛应用,产生很多不同的C语言版本。程序可移植性比较差。
-
1983年,美国国家标准委员会(ANSI) 成⽴⼀个小组来制定C语⾔的标准。 C语言支持哪些语法、支持哪些功能 等等。
-
1989年,通过了C语言的第⼀个标准-C89标准。
-
1990年,国际标准化组织(ISO) 和 国际电工委员会(IEC) 将 C89标准当做国际的C语言标准。 C89和 C90指的是同⼀个标准。
-
1994年 ISO和 IEC 对 C89标准进行修订,发布了 C94标准。 由于并没有增加新的语法特性,还是叫做 C89或者C90。
-
1995年 ISO和IEC再次做了修正,发布了C95 标准。
-
1999年 ISO 和 IEC 发布了C语⾔新标准-C99标准。 C语言第⼆个标准。在该标准中,新增许多实用的C语言语法特性,例如,增加新的关键字、可变长数组等等。
-
2007年,重新修订了C语言。
-
2011年, 发布新的版本。新增了⼀些语法,泛型、国际化支持。 目前为止最新版本是 C11。
1.2 标准的影响
-
可将C语⾔的标准理解为C语⾔说明书。但其并没有强制性约束⼒。
如:微软拿到标准,认为有些标准不合理,不⽀持。
微软认为某些特性⾮常好,但标准中没有,微软可以修改标准,新增语法.
-
如果编译器不⽀持标准,我们即使使用标准中的语法仍然会报错。
-
编译器版本也会影响程序。因此,编写程序之前要确定编译器版本。
1.3 常用的C/C++编译器
-
微软公司的Visual Studio
-
苹果公司的XCode
-
英特尔的Intel C++
-
Linux 默认使⽤的编译器GCC/G++,它们对对标准支持最好
补充知识:
GNU Compiler Collection(gcc),即GNU编译器套件。gcc是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键部分,亦是自由的类Unix 及苹果 MacOS 操作系统的标准编译器。
如果操作系统没有安装gcc,参考以下命令安装gcc编译器:
# 安装gcc
whccf@whccf-VirtualBox:~$ sudo apt-get install gcc
# 查询一下gcc编译器
whccf@whccf-VirtualBox:~$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.5.0-3ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
3 第一份代码HelloWorld
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
4 代码分析
-
include头文件包含
-
#include的意思是头文件包含,#include <stdio.h>代表包含stdio.h这个头文件
-
使用C语言库函数需要提前包含库函数对应的头文件,如这里使用了printf()函数,需要包含stdio.h头文件
-
头文件:在c语言中后缀名为h的文件被称为头文件,头文件就像一本书的目录,当我们想使用某本书里的内容时,只需把目录(头文件)引进来就可以了。
-
-
main函数
-
程序的入口,一个程序有且只有一个main函数入口
-
{}叫代码块,一个代码块内部可以有一条或者多条语句
-
所有的可执行语句必须是在代码块里面
-
C语言每句可执行代码都是";"分号结尾
-
所有的#开头的行,都代表预编译指令,预编译指令行结尾是没有分号的
-
-
printf函数
-
printf是C语言库函数,功能是向标准输出设备输出一个字符串
-
printf(“hello world\n”);
-
\n的意思是回车换行
-
-
return语句
-
return代表函数执行完毕,返回return代表函数的终止
-
在main函数中return 0代表程序执行成功
-
欢迎您同步关注我们的微信公众号!!!