C++头文件有关内容(不断更新)
来源:互联网 发布:快速排序java实现 编辑:程序博客网 时间:2024/06/06 20:12
其实头文件与源文件并无本质区别,只不过文件扩展名不同,且头文件无法编译。#include就是将文件扩展到源文件内容中。头文件主要实现接口的功能,而函数功能的实现由其他源文件完成。
(1)名字在使用之前要先声明或定义,如果编写一个大型程序,想使用其他文件定义的函数,那需要能让编译器能够找到那个函数,常用的方法是定义源文件的头文件,在头文件中声明(推荐方式)。还有就是可以直接包含该文件(虽然不知道为什么错误,但是还是尽量遵从好的编程习惯)
错误的方式,源文件直接包含另一源文件,当然这是不建议的方式。
常用的方式,通过创建头文件引用其他文件中的函数。
头文件定义
而头文件中函数的定义在putout.cpp中,运行结果显示E:\C++练习\头文件有关练习\useheader.o:useheader.cpp|| undefined reference to `putout(int, int)'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
说明没有找到putout.cpp中函数的定义。那头文件是如何找到函数定义的呢?
通过查资料得知以下内容:
编译器的处理过程包括预处理、编译、链接、生成可执行文件。
#include预处理命令属于预处理过程,进行文本替换。
编译过程中,生成目标文件。头文件中的函数声明只保证了编译不会出错,例如头文件中声明某个函数,源文件使用该函数,可是编译过程并不能找到该函数的实现,将函数或变量视为一个个的符号,找到函数实现的任务落在下一过程。
链接过程负责处理程序中的一个个的符号,使之变得有真实意义,该过程会去其他目标文件中查找函数的实现,调用函数。最后形成一个可执行程序。
在这里所面临的问题是,无法使编译器找到实现函数文件生成的目标文件。查到的解决方法有两个,第一将多个源文件组建为项目(project),IDE就会自动找到函数实现源文件,或者将源文件生成库文件。第二是通过使用makefile的方式。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。(引自百度百科)
头文件可以出现的内容包括类定义,由常量表达式初始化的const变量,inline函数定义,变量的声明,函数的声明。
为什么不能再头文件中定义函数及变量参见http://blog.csdn.net/fushiqianxun/article/details/7961552
为什么头文件中可以出现类定义?
头文件中保护符的出现可以保证类不会重复定义。
为什么头文件中可以出现由常量表达式初始化的const变量?
在头文件中定义const变量的原因使多个文件使用相同的常量值。const变量默认为定义该变量文件的局部变量,所以不会出现重复定义的问题。为了使各个文件中的使用相同的常量值,所以使用常量表达式初始化而不是变量。(为什么不使用变量呢,你要用也没人拦着你,不过变量在运行阶段才能确定值,而且需要去其他源文件中查找变量的值到底是多少,而且很不安全,如果变量值改变,那常量值是不是也改变了,需要重新编译,还不如直接在头文件中声明变量呢)
为什么可以头文件中可以出现inline函数定义?
inline函数声明适用于那些代码量较少,但是使用频率较多的函数。普通函数的放在代码区,由系统分配代码入口地址,当需要调用函数时,就将程序控制权交给普通函数,执行完后将返回值返回给调用函数者。这样一来一回很耗费时间。而内联函数(inline函数)的使用方法为将它在程序中的每个调用点“内联地”展开。可以简单地理解为将代码展开。这样一来没有改变程序的控制权,程序执行的时间大大减少。将内联函数定义放在头文件中,这样编译器才知道如何展开内联函数。
- C++头文件有关内容(不断更新)
- 有关CString的头文件(C/C++)
- Object-C 常用内容(不断更新)
- C/C++头文件中内容
- C/C++头文件包含内容概览
- cout有关头文件
- C/C++头文件与实现文件中的内容安排
- Linux有关文件内容
- DICOM-文件头,内容
- 头文件的内容
- 头文件补充内容
- 有关头文件conio.h
- 文件&&头文件&&源文件(C++)
- errno.h头文件内容
- ffmpeg.h头文件内容
- ioCC2530.h头文件内容
- apue.h头文件内容
- idea修改文件头内容
- 第四周作业的抄写部分
- python数据结构与算法 11 后缀表达式求值
- hdu 1874 畅通工程续(Floyd)
- 2012-01-29 19:01 Http的KeepAlive最详细的说明文档
- JAVA_类加载器详解
- C++头文件有关内容(不断更新)
- oracle递归查询
- 对象间是如何进行勾搭的?
- mouseover事件与mouseenter事件的区别
- ZFC 修改记录
- C++内存结构
- oj总结【审题】
- oj之路(第一天)(续:由题目看思想)
- 题目1002:Grading 2011年浙江大学计算机及软件工程研究生机试真题