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中。不管你的头文件会不会被多个文件引用,你最好是都加上这个。
如有错误,敬请指正,礼貌交流,感激不尽
注,以上运行结果来自软件dev c++运行截图,VC6.0也能运行出正确结果。