看似原始的做法,却是相当高效的引用方式。
编程语言的头文件包含
- C/C++支持头文件包含。
- PHP还可将include语句置于条件语句中,include_once类似ObjC的#import可以保证不会重复包含。PHP还提供require包含指定文件,它和include的差异是前者出错时会停止执行,后者不会。
头文件包含的本质
- 文本插入。
- #include包含.h是最常见的用法,但不限于.h, 任何合法的文件都可以被包含。
头文件插入后的行号错误
- 用gcc -E选项预处理后的代码,可以看到形如# 5 "1.c"之类的插入行,它们在提示编译器把后面的代码行数看做是第五行。之所以存在是因为,头文件插入文本破坏了源代码的行号,编译器需要理清真实的行号。#line <line_no>作用类似。
不使用头文件的情形
- 头文件包含在一些破解和逆向可能有奇用,这是C/C++语言设计导致的。比如,早期iPhone越狱破解,虽然大家不知道苹果给的库的真实头文件,但通过逆向猜到了头文件的样子,可以写这样一段头文件声明,就可以使用库函数了。
- 一个更简单的例子,你不想用stdio.h其他的声明, 也可以写一个自己的头文件,只包含printf原型,即可使用printf.