C语言从入门到放弃

Unix是C的作者开发的。
Unix附属诞生物,当时使用的是cc编译器
然后有了linux就封装成了gcc编译器,但由于考虑到老家伙的使用习惯,还保留了cc
C语言是结构化程序语言(一个程序能包含多个函数).C语言简单粗暴,主要由两大块组成,头文件和函数。
Nginx就是由C语言编写的比Apache性能优越。

关于VIM的使用:
:set nu   (打开行号显示命令)

编辑c文件
直接编译命令$ cc hello.c
如果hello.c中需要引入其他文件中的函数

可以将目标文件先编译成编译成.o文件(二进制文件)$ gcc -c max.c -o max.o,然后编译$ gcc max.o hello.c (这样编译可以大大提高编译效率)
这样可以调用别人写的功能函数文件。但是当比人将自己写的c文件编译成了.o文件我们是看不到源码的,这时我们怎么知道使用方法呢?
解决方案:模仿.h文件的编写。在.h文件中描述用法,然后导入.h文件即可。

然后在主c文件中导入:

这时再$ gcc max.o min.o hello.c 即可完成编译。
这样做的优点: 提高编译效率,和代码完整性,以及工作上的解耦(分工合作)。

方便编译源代码: 
     上述我们使用cc/gcc命令编译源代码。但是问题来了,如果你的文件中导入了几千个别人写的.o文件那该怎么编译,一个个敲嘛?这显然是不可取的。针对这个问题,make工具就应运而生了。
先介绍一下make:
     make是属于GUN项目的封装了gcc的批量自动编译工具,介绍完毕。
make的安装及使用:
sudo apt-get update  更新源
sudo apt-get install make
很多人写的文件组合起来需要编译及使用,先潜规则约定一个Makefile文件用于说明多个与本项目有关的文件,可以在里面写注释,里面的编写规则主要是按照make的规则,让它识别即可。  
Makefile文件编码规则: tab缩进需6个空格的规格。如果是四个空格的缩进则make编译时会出现异常,并且缩进必须为tab,不能使用6个Space代替。

Makefile一行一行的读,如果碰到没有的文件则向下递归查找并执行,最后回归执行主命令。
编写好Makefile文件后,之接在当前文件下 $ make 即可自动完成编译。
指定文件名称输出$ gcc max.o min.o hello.c -o hello.out

linux中的shell指令: && (类似于管道‘|’指令),传输连接执行, 并且&&前面执行返回值为0时后面的命令才执行,每一条命令都相当于执行一个可执行文件,而可执行文件又是c语言编译过来的。
                              $ echo $? 查看上条指令是否执行成功,如果返回值是0则代表成功,否则为不成功。
  
将默认的return 0; 改为别的,也能执行但是返回值就变成修改的那个了,这样不符合系统有些命令的规则,就会出现上面的情况。

标准输入流,输出流,错误流的效果实现:

printf/scanf是由fprintf/fscanf后期封装形成的,也就是默认的执行输出/输入/错误流都被封装好了(默认的都是变准流:比如键盘屏幕等)。
运行效果如下:

如果输入小于0的参数就触发了错误流分支,返回自定义的错误信息。linux也就是由若干个小工具组成的。

关于linux的重定向


标准输出流重定向(>>追加模式, >表示覆盖重写 , 红框中的1可以省略,默认自带。 ):


标准输入流重定向(反向重定向,将即将输入的数据/参数提前写到一个文档中然后敲命令):


标准错误流:
先修改main.c文件:

然后编译$ cc main.c
       运行$ ./main.out
如果将j输入值为0即出发标准错误流机制。

上图中画红线的命令意思: 执行a.out文件,将标准输出流重定向到t.txt文件,将标准错误流重定向到f.txt文件中(2代表标准错误流)。

当前没有建立input.txt文件,所以执行后会向错误流文件(f.txt)中打印错误信息。

关于管道( | )的原理以及应用:
linux管道可以将linux shell中多个小工具集合起来一起使用。
有了管道linux才可以变得无比强大,没有管道多个程序很难结合在一起工作形成一个大项目。

为了理解管道的作用,写个小实例,内容如下图,然后分别编译:


将编译后的可执行文件(小工具)通过管道串行执行,input的输出流正好是avg的输入流,然后得出最终结果。

到此,入门C基本知识点将告一段落。

接下来将讲到C语言的核心知识(灵魂): 指针和内存

未完待续 ... ...











猜你喜欢

转载自blog.csdn.net/wys578/article/details/80647130