C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的信燃雹C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进段扰行编译。
本质上没有任何区别。 只不过一般:.h文件是头文件,内含函数声明、宏定义、结构体定义等内容
.c文件是程序文件,内含函数实现,变量定义等内容。而且是什么后缀也没有关系,只不过编译器会默认对某些后缀的文件采取某些动作。你可以强制编译器把任何后缀的文件都当作c文件来编。
编译器在编译时是以C文件为单位进行的,也就是说如果你的项目中一个C文件都没有,那么你的项目将无法编译,连接器是以目标文件为单位。
它将一个或多个目标文件进行函数与变量的重定位,生成最终的可执行文件,在PC上的程序开发,一般都有一个main函数,这是各个编译器的约定,当然,你如果自己写连接器脚本的话,可以不用main函数作为程序入口。(main .c文件 目标文件 可执行文件)
扩展资料
main函数为标准C/C++的程序入口,编译器会先找到该函数所在的文件。
假定编译程序编译myproj.c(其中差枣含main())时,发现它include了mylib.h(虚迟拆其中声明了函数voidtest()),那么此时编译器将按照事先设定的路径(Include路径列表及代码文件所在的路径)查找与旦埋之同名的实现文件(扩展名为.cpp或.c,此例中为mylib.c)。
如果找到该文件,并在其中找到该函数(此例中为voidtest())的实现代码,则继续编译;如果在指定目录找不到实现文件,或者在该文件及后续的各include文件中未找到实现代码。
则返回一个编译错误.其实include的过程完全可以"看成"是一个文件拼接的过程,将声明和实现分别写在头文件及C文件中,或者将二者同时写在头文件中,理论上没有本质的区别。
C是程序代码百(即源文件)是保存你的C代码的文件,C文件依次编译,并对应。每个OBJ文件都被生成,即问目标文件的答案,是对应C文件的二进制版本,一旦连接,您就有了您的.exe文件,它是您的可执行文件。
Obj文件结构:Obj文件不需要任何类型的文件头,衫察尽管用几行文件信息启动文件是很常见的。
OBJ文件由几行正塌游文本组成,注释行以符号“#”开头,空格和空白行可以随意添加到文件中,使其更具可读性。带有单词的行以一个或两个标记的字母(或关键字)开头,这些字母或关键字描述行是什么类型的数据。
扩展举销资料:
C编译的整个过程非常复杂,大致可以分为以下几个阶段:
1.预处理阶段
工作在这个阶段主要是源代码的预处理,主要包括宏定义指令,头文件包含指令,预定义的指令和特殊字符的处理,如更换一个宏定义和文件的文件头包含预定义的代码来代替,总之这一步主要做一些更换,输出相应的文件相同的意义,但不同的内容文件。
2.编译和优化
编译是通过词法分析将第一阶段处理的文件转换成汇编语言。优化包括中间代码的优化,如公共表达式的删除、循环优化等。并优化生成目标代码,如如何充分利用机器的寄存器来存储相关变量的值,以减少访问内存的次数。
3.组装阶段
将汇编语言翻译成机器指令。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)