这是一个不复杂的问题;可是网上不少回答都不全面;偶找了一个比较全面的(测试过):c++
#include有两种形式,例如以下:测试
#include <syshead.h>
#include "userhead.h"
用尖括号表示的是包含系统的头文件,用双引号包含的是用户本身的头文件。.net
下面是使用#include时的一些规则:unix
1)使用<>包含的头文件通常会先搜索-I选项后的路径(即用gcc编译时的-I选项),以后就是标准的系统头文件路径。blog
2)而用""号包含的头文件会首先搜索当前的工做目录,以后的搜索路径才是和<>号包含的头文件所搜索的路径同样的路径。get
3)在unix系统中,通常标准的头文件路径为:it
/usr/local/include
/usr/lib/gcc-lib/target/version/include
/usr/target/include
/usr/include
4)通常有两条独立的头文件搜索路径链。一条是-I后面指示的路径,另外一条是系统头文件路径和以-prefix, -withprefix,和-idirafter后操做的目录。io
5)若是gcc编译的是c++的程序,那么在搜索上面所说的目录前,预处理器会首先搜索/usr/include/g++v3目录,v3是你的gcc中c++的版本。编译
6)在头文件中运行增长路径名,例如:#include <sys/time.h>,那么就会在搜索的系统目录的sys目录下寻找time.h文件。gcc
7)通常会用斜线来做为目录的分割符,甚至有些系统使用不一样的字符做为分割符(例如反斜线)。
8)#include后面所包含的文件名就是文件名,例如abc*d.h这个文件,必须就要有abc*d.h这个文件,而不是abckkkd.h这些文件,*不能解释成任
何的字符的意思,而是实实在在的一个字符。
9)可使用一个指定的名字做为#include指令后面的头文件,例如:
#define BOGHEADER "bog_3.h"
#include BOGHEADER
10)在#include 指令的后面,除了所包含的头文件和注释外,不能包含其它的任何东西了。
11)#line指令不能改变当前的工做目录。
12)-I-选项能够改变-I指定的搜索目录。