头文件是源程序的一部分,那么源程序是什么呢?

头文件是源程序的一部分,那么源程序是什么呢?,第1张

文件和源文件在本质上没有任何区别。   只不过一般:后缀为  .h 的文件是头文件,内含函数声明、宏定义、结构体定义等内容。后缀为  .c 的文件是源文件,内含函数实现,变量定义等内容。而且是什么后缀也没有关系,只不过编译器会默认对某些后缀的文件采取某些动作。这样分开写成两个文件是一个良好的编程风格。

简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:

①预处理阶段

②词法与语法分析阶段

③ 编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各         个目标文件 (.obj文件)

④连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关           的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格         式信 息。(生成.exe文件)

3.比方说 在aaa.h里定义了一个函数的声明,然后在aaa.h的同一个目录下建立aaa.c , aaa.c里定义了这个函数的实现,然后是在main函数所在.c文件里#include这个aaa.h  然后我就可以使用这个函数了。 main在运行时就会找到这个定义了这个函数的aaa.c文件。这是因为:main函数为标准C/C++的程序入口,编译器会先找到该函数所在的文件。假定编译程序编译myproj.c(其中含main())时,发现它include了mylib.h(其中声明了函数void test()),那么此时编译器将按照事先设定的路径(Include路径列表及代码文件所在的路径)查找与之同名的实现文件(扩展名为.cpp或.c,此例中为mylib.c),如果找到该文件,并在其中找到该函数(此例中为void test())的实现代码,则继续编译;如果在指定目录找不到实现文件,或者在该文件及后续的各include文件中未找到实现代码,则返回一个编译错误.其实include的过程完全可以“看成”是一个文件拼接的过程,将声明和实现分别写在头文件及C文件中,或者将二者同时写在头文件中,理论上没有本质的区别。以上是所谓动态方式。对于静态方式,基本所有的C/C++编译器都支持一种链接方式被称为Static Link,即所谓静态链接。在这种方式下,我们所要做的,就是写出包含函数,类等等声明的头文件(a.h,b.h,...),以及他们对应的实现文件(a.cpp,b.cpp,...),编译程序会将其编译为静态的库文件(a.lib,b.lib,...)。在随后的代码重用过程中,我们只需要提供相应的头文件(.h)和相应的库文件(.lib),就可以使用过去的代码了。相对动态方式而言,静态方式的好处是实现代码的隐蔽性,即C++中提倡的“接口对外,实现代码不可见”。有利于库文件的转发.

头等程序对象(first class object)

以对象和函数为例阐述头等对象的定义

如果程序中的对象满足它的创建和使用没有任何限制,可以作为 *** 作数出现在表达式中求值,可以作为单独的存储实体,可以作为参数传递到过程或者函数,可以作为函数的返回值,可以构成复杂的数据结构。头等对象还有一个明显的特征就是可以在运行时被创建与销毁。C语言中的scalar data types(标量数据类型)我们知道是头等对象,比如int,float类型,这些基本对象均满足我们提出的头等对象的特征。

下面主要讨论C++语言中的Object和Function的对象等级问题。

对于C++中的object(对象)和class(类),前者是后者的实例化。Class的定义是一种虚拟化的规则的说明,而object则是具体的类的实现。一个对象有相应的构造函数与析构函数,在程序中动态声明对象的时候,程序会自动调用对象的构造函数,对象失效时,程序会进入对象的析构函数,撤销对象占用的资源。再者,对象可以作为参数传递给函数作为参数,比如在我们经常会看到这样的语句:bool Push(Stack &S, type x),同时对象还能够作为返回值返回。另外,对象有单独的存储实体,C++ 中的Serialize函数就是把对象写入文件或者从文件中读取对象,这说明在对象在文件中有一块独立的存储空间,这一点可以区分出class(类)并不是头等程序对象,因为class只是抽象地声明。而对于以上几点,说明object(对象)在C++语言中是头等对象。

在C和C++语言中,在程序运行过程中,我们不能动态创建一个function,C++中的函数都是实现在程序写好的,然而对于一些函数式的语言来说,Function就是头等程序对象,因为它们可以传递给其他函数作为参数,也能够在程序运行过程中动态地创建与销毁。对于C/C++中得Function,我们可以称之为second-class object(次等对象),因为虽然它不满足严格的头等对象的定义,但是我们可以通过指针类型,辅助function完成上述工作。

除了上述两者的讨论,数组,结构体均不是头等程序对象。

头脑风暴力图通过一定的讨论程序与规则来保证创造性讨论的有效性,由此,讨论程序构成了头脑风暴法能否有效实施的关键因素,从程序来说,组织头脑风暴法关键在于以下几个环节: 参加者不应该受任何条条框框限制,放松思想,让思维自由驰骋。

从不同角度,不同层次,不同方位,大胆地展开想象,尽可能地标新立异,与众不同,提出独创性的想法。 头脑风暴会议的目标是获得尽可能多的设想,追求数量是它的首要任务。参加会议的每个人都要抓紧时间多思考,多提设想。至于设想的质量问题,自可留到会后的设想处理阶段去解决。在某种意义上,设想的质量和数量密切相关,产生的设想越多,其中的创造性设想就可能越多。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11793011.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存