向C语言项目 Graph1
中添加 Graph2.h
这样一个头文件。
在 Clion 中我们会发现,在头文件Graph2.h
中,会自动生成以下三行代码:
#ifndef GRAPH1_GRAPH2_H
#define GRAPH1_GRAPH2_H
Part1
#endif
Part2
-
这三行代码主要作用是:防止该头文件被重复引用。“被重复引用” 的意思是:这个头文件在同一个 .c/cpp 文件中被多次声明。这种错误一般是由于
#include
的嵌套造成的。- 比如说,我们在
Graph2.h
中使用了#include Graph3.h
,同时,在Graph.c
文件中我们又使用了#include Graph3.h
这就会造成重复引用。
- 比如说,我们在
-
头文件被重复引用的后果
- 有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些。但是对于大工程来说,这也是不能忍受的;
- 有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)这种会引起重复定义。
- 这种方法只能解决一个文件中的重复引用问题。
-
这几句代码的意思
#ifndef
= if not define 的缩写。#define
宏定义#endif
结束- 连起来,就是一个很简单的
if-else
语句。如果头文件没有被定义,就定义;否则就不用。 - 请注意:如果 Part1 和 Part2 是两部分内容。如果没有定义过 Graph2.h ,定义它,并且执行 Part1 ;如果已经定义过了,那就执行 Part2。从另一个角度来看,Part1 的代码只会被执行一次。