咱们在使用c编程的时候常常会遇到头文件,前段时间我本身作了个小项目的时候,也遇到了关于头文件的问题。编程
预处理器发现#include 指令后,就会寻找后跟的文件名并把这个文件包含的内容包含到当前文件中。被包含文件的文本将替换源文件中的#include 指令,就像您把被包含文件中的所有内容键入到源文件的特定位置同样(摘抄自 cprimer plus)。简单来讲就是,编译器把 #include 后跟随的文件内容都写到源文件中,写的位置就是 #include放的位置。函数
#include指令有两种形式spa
1:#include<stdio.h> 文件名放在尖括号里面unix
在unix系统中,尖括号告诉预处理器在一个活多个标准的目录中寻找文件。若是作开发,好比,我使用keil和mdk,编译器也遵循这样的原则,放在默认目录中,不用人工处理。开发
2:#include”mystuff.h” 文件名放在双引号中编译器
有两种形式:io
<1>:#include”hot.h”收索当前的工做目录编译
<2>:#include”/usr/biff/p.h”收索/usr/biff所在的目录搜索
对于unix系统,使用双引号意味着先搜索本地目录,可是具体收索那个牡蛎依赖于编译器。有些编译器收索源代码所在的目录,还有些收索工程文件所在的目录。引用
对于我使用的mdk,我是将文件所在的文件夹添加到工程可以搜索的目录中。
在写c程序的时候,咱们常常会把函数写在一个.c文件中,而后在另外的.c文件中引用函数,使得整个程序更加整洁,方便。
可是在头文件使用的时候常常出现重定义的错误,我使用的解决办法是:
首先把hello.c拆分为两个文件hello.c和hello.h。hello.h中包含hello.c所须要的头文件和.c中出现的函数名。例如在hello.c中有
void add (int x,int y)
{
z=x+y;
return y;
}
就在hello.h中添加 void add(int x,int y);和hello.c所需的头文件#include<stdio.h>
在拆分后的hello.c添加#include”hello.h”,而后把hello.c和hello.h放在同一个文件夹便可。当有文件须要add函数时直接在头文件中添加#include”hello.h”便可。
当多个文件引用hello.h时候,例如当plus.c中引用hello.c,jump.c须要使用plus.c和add.c。就会出现重定义的错误(引用hello.c和plus是z指将hello.h和plus.h头文件添加到jump.c中)
这时候就引用防重定义。假设要放重引用hello.h 在开头添加
#ifndef __HELLO_H__
#define __HELLO_H__
结尾添加
#endif
既把你要重定义的文件的开头添加
#ifndef __HELLO_H__
#define __HELLO_H__
HELLO就是你文件的名字改为大写 H就是你文件类型
再在结尾加上
#endif
便可。