c语言中是如何实现模块化的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中是如何实现模块化的相关的知识,希望对你有一定的参考价值。
作为初学者已经了解了C的一些基本特征
但是编程序时还是只会将MAIN函数与所需调用的函数(自编的)放在一个SOUCE FILE里面
请问如何能将主程序文件改为只使用MAIN函数并调用自编函数而在其他文件中存放被调的自编函数的代码啊?
所用为VC++6.0的环境
请说详细点 谢谢了
1、每个源文件就是一个独立的模块,它应该能够在不连接任何其它模块、不需要其它源文件的情况下独立编译。
2、模块之间是通过函数、常量、变量、结构定义、宏(似乎也是常量的一种)进行交互的
3、每个模块应该包括导入和导出两个部分,比如要调用另外一个模块的函数foo(),需要
extern int foo();
这应该属于模块的导入部分
而由该模块提供的函数,应该在相应的头文件中声明,作为模块的导出部分。
模块的导出部分应该放在该模块的头文件中。
4、如果只在本模块使用的变量,在本模块中定义成static的就可以了;否则就是全局变量,全局变量在头文件中声明一下,同时也作为模块的导出部分。
5、宏既可以定义在头文件中,也可以定义在源文件中。如果宏只是模块中用到,相当于局部常量,放到源文件中好了;如果其它模块也要用到,那么把它放到头文件中去。
6、结构定义似乎都放在头文件中。是不是应该另外有一个头文件,专门用来定义结构???
首先,我不知道自己的想法是否正确;其次,关于到底应该怎么样组织文件,我想应该也是有个标准的,可惜我没找到这样的资料。希望有高人能站出来指点一下,谢谢 参考技术A C语言中的模块化体现在两个方面:
1 函数。
函数是C语言的最小单位,每个函数均实现一个独立的功能,于是每个函数均可以当做是一个最小的功能模块。这样,C语言就实现了最基本的模块化。
2 文件。
在C语言中,支持一个程序由多个源文件编译,所以可以把类似功能的一组函数写在同一个文件中,以源文件为单位,实现模块化。
当模块较大时,可以写在多个头文件中,然后编译成一个库文件,以库文件为单位,实现模块化。 参考技术B 呵呵
C语言本身就是其他语言的基础
学习C语言不需要基础的
标头在 Objective-C 中是如何工作的?
【中文标题】标头在 Objective-C 中是如何工作的?【英文标题】:How do headers work in Objective-C? 【发布时间】:2013-04-27 22:26:09 【问题描述】:除了允许一个文件使用另一个文件的属性之外,幕后实际发生了什么?它只是在以后需要其内容时提供访问该文件的位置,还是将实现的数据加载到内存中?
【问题讨论】:
【参考方案1】:总之;
头文件定义了模块的 API。这是一份合同,列出了第三方可以调用的方法。该模块可以被视为第三方的黑匣子。
实现实现了模块。它是黑匣子的内部。作为模块的开发人员,您必须编写此代码,但作为第三方模块的用户,您不需要了解有关实现的任何信息。标题应包含您需要的所有信息。
头文件的某些部分可以自动生成 - 方法声明。这将需要您对实现进行注释,因为实现中可能存在私有方法,它们不构成 API 的一部分,也不属于标头。
头文件有时包含其他信息;类型定义,常量定义等。这些属于头文件,而不是实现。 头文件的主要原因是能够#include 它在其他文件中,因此您可以在另一个文件的一个文件中使用函数。标头包含(仅)足以能够使用函数,而不是函数本身,因此(我们希望)编译它的速度要快得多。
独立维护这两个结果是因为没有人编写过能够很好地自动化该过程的编辑器。他们不能这样做的原因并不多,甚至有一些人甚至尝试过——但这样做的编辑在市场上从来没有做得很好,更主流的编辑也没有采用它。
好吧,我会尝试: 只有在预处理阶段才需要头文件。一旦预处理器完成了它们,编译器甚至不会看到它们。显然,目标系统也不需要它们来执行(同样不需要 .c 文件)。
相反,库是在链接阶段执行的。如果一个程序是动态链接的,并且目标环境没有必要的库,在正确的位置,具有正确的版本,它将无法运行。 在 C 中,不需要这样的东西,因为一旦你编译它,你就会得到本机代码。当你#include它时,头文件被复制粘贴。它与您从 java 获得的字节码非常不同。不需要解释器(如 JVM):您只需将二进制文件提供给 CPU,它就会完成它的工作。
【讨论】:
希望得到编译器级别的解释,但这是对标头的精彩概述。 我再编辑几行,你有这个链接:en.wikipedia.org/wiki/C_preprocessor我很抱歉我没有更多的深度。 额外的一点很有启发性。我认为我的好奇心正在引导我进行链接。以上是关于c语言中是如何实现模块化的的主要内容,如果未能解决你的问题,请参考以下文章
使用C语言为python编写动态模块--在C中实现python中的类