十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
头文件和源文件在本质上没有任何区别。 只不过一般:后缀为 .h 的文件是头文件,内含函数声明、宏定义、结构体定义等内容。后缀为 .c 的文件是源文件,内含函数实现,变量定义等内容。而且是什么后缀也没有关系,只不过编译器会默认对某些后缀的文件采取某些动作。这样分开写成两个文件是一个良好的编程风格。
创新互联公司始终坚持【策划先行,效果至上】的经营理念,通过多达10余年累计超上千家客户的网站建设总结了一套系统有效的全网营销推广解决方案,现已广泛运用于各行各业的客户,其中包括:电动窗帘等企业,备受客户赞扬。
简单的说其实要理解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++中提倡的“接口对外,实现代码不可见”。有利于库文件的转发.
在源文件A1.c中调用A2.c 中的函数有两种方法:
1、在A2.c中有完整的函数定义,在A1.c中添加一下要用到的函数原型(声明)就可以了,例如:
在A2.c中:有函数void A2(){...};。
在A1.c中:在文件前头增加一行:void A2();就可以了。
2、把A2.c中完整定义的函数的原型,写到一个A2.h文件中,然后在A1.c的文件头增加#include "A2.h"就可以了。
以上两种方法,在A1.c中都可以正常的调用,就跟在A2.c中调用一样。
其实函数默认是外部的,只要在其他文件中声明就能使用;但是注意如果在前面加上static,就只能在本文件中使用了,不能再被其他的文件调用。
扩展资料:
1、一个.h文件要 对应有一个.c文件,这样链接器就可以调用这个文件里的函数。比如a.h 和 a.c。
2、把相应的函数定义写在.c文件中。这里要强调一点:要加上#include ".h",这个一般作为一种工程规范。因为如果.c文件中的函数也需要调用同个.c中的其它函数,那么这个.c往往会include对应的.h。比如头文件里进行了变量的声明,这个时候对应的.c文件是一定要加上这个头文件的。
3、再在其他的main.c文件开头添加#include "a.h"。
C语言源程序是由:数据类型、常量与变量、数组、指针、字符串、文件输入/输出构成。
具体介绍:
1、数据类型
C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。
2、常量与变量
常量其值不可改变,符号常量名通常用大写。变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。
3、数组
如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。字符串也是一种数组。它们以ASCII的NULL作为数组的结束。要特别注意的是,方括内的索引值是从0算起的。
4、指针
指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值,不同于return(z)这样的仅能得到一个返回值。
指针是一把双刃剑,许多操作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。
5、字符串
C语言的字符串其实就是以'\0'字符结尾的char型数组,使用字符型并不需要引用库,但是使用字符串就需要C标准库里面的一些用于对字符串进行操作的函数。它们不同于字符数组。
6、文件输入/输出
在C语言中,输入和输出是经由标准库中的一组函数来实现的。在ANSI C中,这些函数被定义在头文件stdio.h;中。
扩展资料:
语言特点
1、高级语言:它是把高级语言的基本结构和语句与低级语言的实用性结合起来的工作单元。
2、结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
3、代码级别的跨平台:由于标准的存在,使得几乎同样的C代码可用于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要进行硬件操作的场合,优于其它高级语言。
4、使用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持。
我们写个作文,其实要加上#include新华字典。h
用词语要《汉语词典。h》用到数字的加减法《数学。h》物理么《物理。h》
电脑比人傻,所以,人一看就知道中文还是英文了。
这里包含了函数,比如一些单词啊。词组啊。人也可以分辨。但是电脑不可以。
这些算头文件吧。。
所以,你要自己定义函数。这我感觉其实也算了。但是,它有自己独特的方式,不属于最基础的东西,所以,这些经常不被称作头文件。另一个原因是《stdio.h》里面会包含一些即便是你定义的函数,这个函数做出来的时候用了一些基本的东西,包含在stdio。h里面。所以。。。
、
源文件,我感觉就是一个函数程序吧。可以是里面的一个scanf()或者printf()这都属于,
如果你不includestido.h那么你自己需要定一个scanf函数,定义个源文件。这个源文件告诉计算机,怎么输入你的字符的。
而同样,你写出的一个程序,它就是一个源文件,广义狭义的范围吧。
资源文件我也会类似的分广义狭义的去理解。
比如你做个网页,分几个步骤,这种套路算一种资源文件。
比如#include《xxx》int main(){……return0;}
这是一种类似套路的资源文件。
另一种是,比如判断素数,简单的我们先做一个判断素数的函数,当我们后面直接用它去判断就算一种资源文件了。比如上面的scanf() printf(),这都属于资源之类的,但我们直接调用了。。
刚自习一周多。不知道对错。有问题帮忙指出,谢谢!