admin管理员组文章数量:1794759
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语言的核心知识(灵魂): 指针和内存
未完待续 ... ...
版权声明:本文标题:C语言从入门到放弃 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686897927a115811.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论