c 头文件 源文件,C编程中头文件和源文件的本质区别是什么

1 , C编程中头文件和源文件的本质区别是什么头文件是存放函数声明和变量说明的文件,源文件是函数的具体实现 。分成两个文件的好处是可重用性 。头文件可以在多个文件中引用,而只在一个源文件中实现其具体功能 。
2,c语言中头文件和源文件如何不同名c语言中没有要求.h与.c文件同名的 , 随便换名都可以的 。一般编程会保持同名是为了方便查找,便利自己跟别人相同点:头文件与源代码都是源文件,都用纯文本文件存储,都需要遵照c/c++语言规范来写 , 都可以使用类型定义和常、变量定义,都可以包含函数的声明和实现,都能包含宏定义,都使用相同的调用规范 。不同点:c/c++的编译器规定源代码文件必须包含函数入口,即main函数 , 或者winmain函数 。而头文件不得包含函数入口,也就是说,头文件不可以单独编译成一个程序,仅仅包含程序片断或者仅仅定义常、变量 。关联:头文件是专为源代码调用而写的静态包含文件 , 可被源代码文件中的#include编译预处理指令解释 , 而将头文件完整拷贝到源代码的指令处,从而在编译时相当于在源代码中插入了函数声明或者实现 。某些头文件包含了静态库中的函数调用声明,包含了lib文件的调用信息,编译时静态链接进程序;而某些头文件是专为方便api调用而写的,里面包含了动态链接库的调用信息和规范,只有在运行时将dll载入内存提取函数执行 。也就是说,其实你将头文件里的信息完全写到源代码里,是可以实现完全相同的功能的 。如果你想要学写头文件,可以参照标准c/c++库的h文件 。
3,C语言中为什么要头文件和源文件分开写首先当编写单个文件时我们都是只有一个.c文件 , 但是真正做工程的时候,会写很多的模块,我们都知道写程序要高内聚、低耦合,这样做可以优化代码,方便后期维护 , 你说的头文件和源文件就是这样的,源文件是实现某些功能 , 而都文件是定义一些通用的数据结构,还有就是源文件里的函数会被其他文件调用,这就要在都文件里声明,你会看到extern function()这样的声明 , 就是为外部提供调用的,这就是问什么要头文件和源文件分开写的原因 。望采纳!相同点:头文件与源代码都是源文件 , 都用纯文本文件存储,都需要遵照c/c++语言规范来写,都可以使用类型定义和常、变量定义,都可以包含函数的声明和实现,都能包含宏定义,都使用相同的调用规范 。不同点:c/c++的编译器规定源代码文件必须包含函数入口,即main函数,或者winmain函数 。而头文件不得包含函数入口,也就是说 , 头文件不可以单独编译成一个程序,仅仅包含程序片断或者仅仅定义常、变量 。关联:头文件是专为源代码调用而写的静态包含文件,可被源代码文件中的#include编译预处理指令解释 , 而将头文件完整拷贝到源代码的指令处,从而在编译时相当于在源代码中插入了函数声明或者实现 。某些头文件包含了静态库中的函数调用声明,包含了lib文件的调用信息,编译时静态链接进程序;而某些头文件是专为方便api调用而写的,里面包含了动态链接库的调用信息和规范,只有在运行时将dll载入内存提取函数执行 。也就是说,其实你将头文件里的信息完全写到源代码里,是可以实现完全相同的功能的 。如果你想要学写头文件,可以参照标准c/c++库的h文件 。【c 头文件 源文件,C编程中头文件和源文件的本质区别是什么】
4,C语言代码的头文件与源文件有什么区别大家对头文件都有一定的误解C,C++程序,本质上只需要.C,.CPP文件就可以.这两个文件会被编译器编译生成模块.头文件其实就是一个额外的文本文件,#include这个预编译命令会把这个文本文件中的内容插入到这个指令的位置.在CPP文件中使用#include命令来包含一个头文件,相当于把头文件中的代码拷贝到CPP文件中调用该预编译指令的位置.之所以要用到头文件,那是因为在编译过程中,一个CPP中如果要调用或使用另外一个模块中的函数或其它符号,就必须先写这个函数或符号的声明.比如void funB();void funA(){funB();}void funB(){}funA要调用funB,你们在funA之前就必须先有funB的声明,有了这个funB的声明,无论funB的定义在哪,funA都能被编译通过了.只要链接时能在所有模块中找到这个funB,你们程序就能链接成功,执行了.正因为这个关系,所以我们一般为一个CPP中的所有函数都写一个声明在对应的H文件中,这样,其他CPP只要包含了这个H文件,就有了这个CPP中所有函数或符号的声明,就可以使用这个CPP中实现的函数或定义的符号了.没有头文件,程序也是完全可以的,只是你每次调用其他CPP中的函数时,都得自己在CPP中再写一遍你要调用的函数的声明.说的不够详细,不知道大家能否理解.头文件就是一个代码文本,放一些声明,让其他源代码文件来包含的.因为会被多个CPP包含,所以当你把定义放到头文件中时,如果有两个或以上地方包含了这个头文件,那么这个定义就也会有多份(因为预处理指令#include 做的是完全的代码拷贝),就会出现重复定义的错误源文件是.c为扩展名,它是未编译的C语言文件,头文件是.h为扩展名 , 它是源文件(.c)在编译时需要调用的文件,通常它们都存放在编译器文件夹中的include文件夹里 。头文件主要是类的声明之类、其他头文件的添加,源文件主要是最后实现部分的代码 。把代码写入头文件,是为了简化源文件代码以及共享代码 。你要知道头文件的用处:当你在程序调用当前没有申明的函数是,编译器会根据头文件去找那个函数 。言外之意头文件只是给编译器提供搜索函数的地方 。所以不能编译和执行了 。头文件被包含在源文件里,要应用某个函数就要写上相应的头文件,而头文件是在源文件里的.当我们写好了一个源文件,如果愿文件有某种一般功能,我们可以保存起来,以后在写别的愿程序代码时通过些头文件,便可直接应用里面的函数了.c编译器对头文件的处理不是生成可执行文件!头文件是用来写一些预处理的东西,比如定义函数原型或变量内存占用的字节等等,这样当源程序中使用到这些变量或函数的时候,系统能分配规定大小的空间,使程序能正常执行.5,C中头文件与源文件分别有什么作用一般来说,头文件提供接口,源文件提供实现 。但是有些实现比较简单的,也可以直接写在头文件里 , 这样头文件接口实现一起提供 。在编译时,源文件里的实现会被编译成临时文件 , 运行时刻程序找到头文件里的接口,根据接口找到这些临时文件,来调用它们这些实现 。头文件和源文件在本质上没有任何区别 。只不过一般:后缀为.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++中提倡的“接口对外,实现代码不可见” 。有利于库文件的转发.从知识产权保护的角度来看:头文件,是结构、函数的声明,可以由一家公司提供给其他公司 , 源文件是函数的实现,它被编译成obj文件或lib文件,提供出去这样以来,别人就知道你是怎么实现的,保护了你的知识产权啊

    推荐阅读