C语言头文件
头文件是扩展名为.h 的文件。 它包含C函数声明和宏定义,并被多个源文件引用和共享。 头文件有两种类型:程序员编写的头文件和编译器提供的头文件。
要在程序中使用头文件,需要使用 C 预处理器指令 # 来引用它。 之前我们已经见过stdio.h头文件,它是编译器自带的头文件。
引用头文件相当于复制头文件的内容,但是我们不会直接在源文件中复制头文件的内容,因为这样很容易出错,尤其是当程序由多个源文件组成时。
A 在C或C++程序中,建议将所有常量、宏、系统全局变量和函数原型都写在头文件中,并在需要时随时引用这些头文件。
引用头文件的语法
可以使用预处理器指令 # 引用用户和系统头文件。 它有两种形式:
#
这种形式用于引用系统头文件。 它在系统目录的标准列表中搜索名为 file 的文件。 编译源代码时,您可以使用 -I 选项将目录添加到列表中。
# “文件”
该形式用于引用用户头文件。 它在包含当前文件的目录中搜索名为 file 的文件。 编译源代码时,您可以使用 -I 选项将目录添加到列表中。
引用头文件
# 指令指示 C 预处理器浏览指定文件作为输入。 预处理器的输出包括生成的输出、引用文件生成的输出以及#指令后的文本输出。 例如,如果您有一个如下所示的头文件 .h:
字符*测试(无效);
还有一个使用头文件的主程序.c,如下:
整数x;
# “。H”
int 主函数(无效)
投入(测试());
编译器会看到如下代码信息:
整数x;
字符*测试(无效);
int main(空)
投入(测试());
只引用一次头文件
如果一个头文件被引用两次,编译器就会对该头文件的内容进行两次处理,从而产生错误。 为了防止这种情况,标准做法是将文件的全部内容放入条件编译语句中,如下所示:
#
#
文件 文件
#万一
该结构通常称为包装#。 当再次引用头文件时,条件为 false,因为它已定义。 此时,预处理器会跳过文件的全部内容,编译器也会忽略它。
条件参考
有时需要选择几个不同的头文件之一来引用到程序中。 例如,您需要指定在不同操作系统上使用的配置参数。 您可以通过一系列条件来实现这一点,如下所示:
#如果
# “。H”
#elif
# “。H”
#elif
...
#万一
但如果头文件很多的话,这样做就很不合适了。 预处理器使用宏来定义头文件的名称。 这称为条件引用。 您只需使用宏名称即可,而不是使用头文件的名称作为 # 的直接参数:
# “。H”
...
#
将扩展并且预处理器将按照最初编写的方式查找 .h。 您可以通过 -D 选项定义。
C预处理器
C演员表
当有多个.h文件和多个.c文件时,我们经常使用一个.h头文件来包含所有.h文件,然后将.h包含在除.h文件之外的头文件中。 实现所有头文件的包含而不混乱。 在每个文件中调用其他文件的函数或变量很方便。
#
#
#
#
#
#
C语言中“”和“”有什么区别?
#<>指的是编译器的类库路径中的头文件。
# “ ”指的是你的程序目录相对路径中的头文件。 如果在程序目录中没有找到所引用的头文件,则在编译器的类库路径目录中查找该头文件。