因为复试所以好好研究c语言,虽然考试内容也仅仅是表面的东西,很多东西设计不到,但我觉的很有必要了解,发现c语言的水也好深呀!所有的c语言课本基本都是着重的介绍语法,对一些东西敬而远之,闭口不谈,导致c语言成为一门仅仅的语法课程,具体实际操作项目太远太远了,寒假的这段时间,因为各种原因让我反思了自己的c语言,反思了学习的过程,才意识到自己也是大多数的问题。
-----------------------------------------------------
这篇文章源自于我在练习课本上例子的时候,我不想原本照抄,我想尽量的演练语法和知识,有一个想法是我写一个排序函数,在另一个程序文件里能不能#include来运用呢,因为对java很熟悉,对java的项目也很熟悉,意识到世间万物都是相通的,自然会觉的c语言肯定会有类似的形式,继而研究了头文件和include的机制,发现了一些文章帮助了自己理解。课本只是告诉你这是编译预处理,深一点的可能会告诉尼这是实现相关功能的代码,但内部是如何实现的怎么运行的我们都不知道,问题是理解这个问题对实际应用这门语言很重要呀!
--------------------------------------------
通过我这两天的学习找资料,算是弄得小明白了,我按我的理解简单说一下,如果理解的不对欢迎纠正。然后推荐几篇帮助理解的博客虽然里面我觉得有些的不大对的地方。
>>>首先要弄清楚C程序文件显示1、编译前的预处理。2、分析语法等错误。3、正式编译 。 4、链接!
在写程序的时候,一般都要加上#include<stdio.h>.....他就是属于1阶段,还包括#define。。。等宏定义都是一个字“换”!.h文件里面都是声明,告诉编译器我先声明函数,全局变量等,在某个文件里有这些东西的实现。就像我们自己在一个文件里面写一个函数要先声明一样,这里也是!只不过声明太多了,当然也是为了程序的拓展性和为了减少冗余代码(技术的发展几乎都是从这几个目的出发),就都放到一个文件里面了。出于传统习惯,我们统一为头文件。编译器读到这会将头文件的都复制过去,并不会检测你到底有没有实现!
>>>于是这样一步步的往下走,生成中间文件什么的,到了最后的连接阶段,他就需要真的把你用到的实现的函数找到并使用了,简单点的gcc A.c B.c -o A
就可以了。大型的项目就需要用makeFile指定要链接到一个哪一个。
>>>>以上就是全部的理解了,里面涉及到的头文件的写法,extern等关键字的用法,makef的写法,gcc的使用,还有编译链接的更具体的实现等就属于硬性的学习的东西了,那东西我可以学,你也可以学,是区分不出我们之间的差距的,而里不理解这个过程,明不明白里面的正确原理才是区分人才和蠢材的关键。是我的体会,也是老师给我的教育。该弄明白的一定要明白,但不到钻牛角尖。
------------------------------
http://www.cnblogs.com/laojie4321/archive/2012/03/30/2425015.html (这里面写的大多数还挺好,中间有一点错误)
http://www.cnblogs.com/suiyu/archive/2013/05/04/3058903.html (c语言具体的编译链接过程)
>>>小结:最近为了复试重新学习c语言但是不想简单的为了考试而复习,再说了语法也没什么好学的,所以就好好研究了一些东西,发现c语言真是好东西,边写边做笔记。还是比较喜欢手写笔记,除非没办法手写的会记录电子版。以后有机会尽量把我学习所有知识,不管是c语言的笔记陆续转为博客。