C 知识量:16 - 74 - 317
#include指令用于在编译前包含文件,当预处理器遇到#include时,就会尝试查找其后的文件名,并将该文件内容包含到#include指令所在的位置。
#include指令有两种形式:
文件名在尖括号中,例如:#include <stdio.h>
文件名在双引号中,例如:#include "mystuff.h"
它们的区别在于:尖括号告诉预处理器在标准系统目录中查找该文件;双引号则告诉预处理器首先在当前目录(或文件名中指定的其他目录)中查找该文件,如果未找到再查找标准系统目录。
#include指令常用于包含头文件,C语言中通常使用.h后缀表示头文件,其中包含需要放在程序顶部的信息。
下面是一个头文件(name_set.h)示例,用于创建一个存储人名的结构和一些使用该结构的函数。
#include <string.h> #define SIZE 20 // 结构声明 struct name_set { char first[SIZE]; char last[SIZE]; }; // 类型定义 typedef struct name_set names; // 函数原型 void input_names(names *); void show_names(const names *);
注意:以上内容是编译器在创建可执行代码时所需的信息,而不是可执行代码,可执行代码通常在源代码文件中。以下是可执行代码部分(name_exe.c):
#include <stdio.h> #include "name_set.h" // 包含头文件 // 函数定义 void input_names(names * pn) { //...省略内容 } void show_names(const names * pn) { //...省略内容 }
在name_exe.c中,因为包含了name_set.h头文件,所以编译器知道names类型。如果在main()函数中使用以上代码,必须首先包含name_set.h头文件,然后编译和链接name_exe.c源代码和main()函数所在的主文件源代码。其中,声明和指令放在name_set.h头文件中,函数定义放在name_exe.c源代码文件中。
头文件的基本信息通常包含以下内容:
明示常量。例如,stdio.h中定义的EOF、NULL。
宏函数。例如,getc(stdin)通常用getchar()定义,而getc()经常用于定义较复杂的宏。
函数声明。例如,string.h头文件包含了字符串函数系列的函数声明。在ANSI C和后面的标准中,函数声明都是函数原型形式。
结构模版定义。标准I/O函数使用FILE结构,该结构中包含了文件和与文件缓冲区相关的信息。FILE结构在头文件stdio.h中。
类型定义。标准I/O函数使用指向FILE的指针作为参数。通常,stdio.h用#define或typedef把FILE定义为指向结构的指针。类似地,size_t和time_t类型也定义在头文件中。
可以在程序中使用自己开发的标准头文件。例如:可以使用头文件声明外部变量供其他文件共享,只要变量声明的类型一致,可以在一个文件中同时使用定义式声明和引用式声明来实现。此外,还可以使用具有文件作用域、内部链接和const限定符的变量或数组。const防止值被意外修改,static意味着每个包含该头文件的文件都获得一份副本,因此,也就不需要在一个文件中进行定义式声明,而在其他文件中进行引用式声明。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6