C语言中多个文件组织(include)的原理
2017-11-16 17:46
134 查看
大学刚学C的时候,老师教的第一个C程序是打印出一个helloword字样,并告诉我们,要使用printf这个东西,C文件开头需要加上一句:#include"stdio.h"
这个语句是实现了什么动作?
后来学到C++,好像老师还是同学(记不清楚了)说了一句,#include 的作用是将目标文件的内容复制到该位置
再后来,学习到函数的定义和声音,老师教我们将函数的声明写在对应的.h文件中,再在对应的.c文件实现该函数的定义,我们需要用到该函数之时,只要将对应的.h文件用include语句包含进来即可。
那么问题来了,既然include只是将目标文件的内容复制到该区域,在预处理后的主程序结构中,将只会函数的声明包括进来,函数的具体定义呢?没有具体的定义,是如何实现函数的调用的?
今天看到一个帖子,终于对于C语言的编译过程有了些许了解,也解决了困扰我这么久的一个问题
第一:函数没有定义实现,编译不会有错但链接找不到实现会报错。
第二个:需要了解exe生成的原理((预处理->编译->汇编->链接);
1:预处理,就是处理文件包含(include),宏定义等替换的动作。 这里的#include 只是替换。
我们看到的库函数头文件一般只是声明,实现一般是生成dll文件。
2:编译 编译器对源代码进行编译,是将以文本形式存在的源代码翻译为机器语言形式的目标文件的过程
3:链接 把用到的外部的地址放到exe中。
使用动态连接编译,比如sprintf,生成的exe中只是简单的记录了当前sprinf函数的地址,只有当运行需要的时候才会到相应的dll中调用改函数的实现。
如果使用静态连接exe则会很大。
头文件包含声明, 库文件包含实现或者与DLL库的连接
如果在代码里要用到这些函数那么就要包含头文件,编译的时候才能知道函数的原形;
在进行代码连接的时候就需要库文件了,这时连接器就把函数的实现代码连接到你的程序(静态库)或者将你的函数调用连接到相应的DLL的对应函数(动态库) 。
微软一般是头文件名字是什么,lib文件也是什么 .怎么找的只有问微软了。
这个语句是实现了什么动作?
后来学到C++,好像老师还是同学(记不清楚了)说了一句,#include 的作用是将目标文件的内容复制到该位置
再后来,学习到函数的定义和声音,老师教我们将函数的声明写在对应的.h文件中,再在对应的.c文件实现该函数的定义,我们需要用到该函数之时,只要将对应的.h文件用include语句包含进来即可。
那么问题来了,既然include只是将目标文件的内容复制到该区域,在预处理后的主程序结构中,将只会函数的声明包括进来,函数的具体定义呢?没有具体的定义,是如何实现函数的调用的?
今天看到一个帖子,终于对于C语言的编译过程有了些许了解,也解决了困扰我这么久的一个问题
第一:函数没有定义实现,编译不会有错但链接找不到实现会报错。
第二个:需要了解exe生成的原理((预处理->编译->汇编->链接);
1:预处理,就是处理文件包含(include),宏定义等替换的动作。 这里的#include 只是替换。
我们看到的库函数头文件一般只是声明,实现一般是生成dll文件。
2:编译 编译器对源代码进行编译,是将以文本形式存在的源代码翻译为机器语言形式的目标文件的过程
3:链接 把用到的外部的地址放到exe中。
使用动态连接编译,比如sprintf,生成的exe中只是简单的记录了当前sprinf函数的地址,只有当运行需要的时候才会到相应的dll中调用改函数的实现。
如果使用静态连接exe则会很大。
头文件包含声明, 库文件包含实现或者与DLL库的连接
如果在代码里要用到这些函数那么就要包含头文件,编译的时候才能知道函数的原形;
在进行代码连接的时候就需要库文件了,这时连接器就把函数的实现代码连接到你的程序(静态库)或者将你的函数调用连接到相应的DLL的对应函数(动态库) 。
微软一般是头文件名字是什么,lib文件也是什么 .怎么找的只有问微软了。
相关文章推荐
- C语言及程序设计实践项目-递归和多文件组织
- 容易被忽略的用法--c语言中用include时可以指定被包含文件的路径
- C语言文件include包含命令
- C语言获取文件CRC32算法附加CRC原理(转)
- C语言项目中头文件/代码文件的组织问题(使用VC6.0)
- F2FS文件系统架构与原理分析(五)——元数据组织及管理
- C语言 预处理一(文件包含--#include)
- Linux基础学习-磁盘与文件系统的组织和原理
- 《C语言及程序设计》程序阅读——程序的多文件组织
- JSP实现树型组织架构(6)--包含文件connectinDB.jsp & orgConnInclude.jsp
- 基于Huffman树的文件压缩原理及C语言实现(二)
- C语言头文件&& 实现文件 && 工程文件组织
- 《C语言及程序设计》实践项目——程序的多文件组织
- 【技术贴】c语言头文件加引号是什么意思?include中有些是尖括号,有些是双引号?
- c语言中头文件#include <stdio.h>和#include "stdio.h"有什么区别?
- 基于C语言的代码文件组织
- C语言的库文件查找次序就是include问题(12)
- F2FS文件系统架构与原理分析(五)——元数据组织及管理
- C语言之include以及多文件团队开发
- C语言常用的代码组织形式--多文件