c语言include语句的一些基本语法(引入任意文件等)

一,c语言include语句的基本语法

首先,众所周知,c语言的#include语句可以引入任何后缀名的文件。

下面来看它可以怎么引入相关文件

1,引入标准库头文件

这个就是一般的用法,例如:

#include<stdio.h>

这个就是引入标准输入输出头文件,有了它,你就可以在接下来的代码里面使用相关的输入输出等函数了。

这种用法中,include后面接的是尖括号,编译器会在系统目录下寻找这个头文件。

2,引入自定义文件

(1)同目录下的自定义文件

例如:

先看一个问题:如何在当前.c文件里引用同目录下的另一个.c文件里面的函数?

假设当前文件名为main.c,另一个.c文件名为test.c。

一般情况下,我们都是在.h文件里面声明函数,然后在它同名的.c文件里面实现该函数。然后在另一个.c文件里用include引入.h文件

但是现在,为了简单且能运行出结果,我就直接在main.c里面用include引入test.c了。

具体做法如下:

例如你有两个文件:main.c,test.c。这两个文件都是在同一目录下的。

在test.c中定义了一个void类型的函数test_out();,

现在你想在main.c里面调用这个函数。

两个文件的内容如下:

test.c

#include<stdio.h>
void test_out()
{
	puts("you get it!");
}
/*
如果要在另一个.c文件里引入test.c文件,那么test.c文件里面是不能写main函数的,
否则两个文件里面都有main函数,就重复了.
*/

main.c

#include<stdio.h>
#include "test.c"
int main()
{
	test_out();
	return 0;
}

运行main.c的结果:

可以看到,这种用法中,main.c文件里面的include后面跟的不是尖括号,而是双引号。

include "文件名"既可以用来引入系统已有的头文件,又可以用来引入用户自定义的文件。

其他文件类型示例:

随便取一个文件格式:abccd

同目录下有两个文件:main2.c和test2.abccd

名为test2的文件,它的文件类型是任意的,里面的内容是:

#include<stdio.h>
void test_out()
{
	puts("succeed!");
}

main2.c里面的内容是:

#include<stdio.h>
#include "test2.abccd"
int main()
{
	test_out();
	return 0;
}

运行main2.c的结果是:

为什么会这样?

假设#include "文件1",这句代码整体都在当前文件第A行,

那么这句代码的作用就是将当前文件第A行的内容换成文件1的全部内容

 你还可以试一下txt等其他类型的文件,其实也是可行的。

(2)其他目录下的文件:

以 Windows 为例,在 D 盘下创建一个自定义的文件夹,名字为abc,它里面有一个头文件叫做xyz.h,那么在程序开头使用#include "D:\\abc\xyz.h"就能够引入该头文件。

3,防止重复引入

假设你test.h是一个可能被重复引入的头文件。为了防止它被重复引入,我们可以这样:

#ifndef _TEST_H_//文件名大写
#define _TEST_H_//文件名大写
#include<stdio.h>
void test_out();//全局变量或者函数要被其他语句包围
int a;//全局变量或者函数要被其他语句包围
#endif

其中,第一行的ifndef其实是if not define的缩写。

当第一次包含test.h时,由于没有定义_TEST_H,条件为真,这样就会包含(执行)#ifndef _TEST_H和

#endif之间的代码,当第二次包含test.h时前面一次已经定义了_TEST_H,条件为假,#ifndef _TEST_H和

#endif之间的代码也就不会再次被包含,这样就避免了重定义了.

这样我们把头文件的内容都放在#ifndef和#endif中。不管你的头文件会不会被多个文件引用,你最好是都加上这个。

参考资料:编译原理--C语言C文件和头文件的关系 - 知乎

如有错误,敬请指正,礼貌交流,感激不尽

注,以上运行结果来自软件dev c++运行截图,VC6.0也能运行出正确结果。