头文件如何避免重复声明

向C语言项目 Graph1 中添加 Graph2.h 这样一个头文件。

在 Clion 中我们会发现,在头文件Graph2.h中,会自动生成以下三行代码:

    #ifndef GRAPH1_GRAPH2_H
    #define GRAPH1_GRAPH2_H

    Part1

    #endif

    Part2

  1. 这三行代码主要作用是:防止该头文件被重复引用。“被重复引用” 的意思是:这个头文件在同一个 .c/cpp 文件中被多次声明。这种错误一般是由于 #include 的嵌套造成的。

    • 比如说,我们在 Graph2.h 中使用了 #include Graph3.h ,同时,在 Graph.c 文件中我们又使用了 #include Graph3.h 这就会造成重复引用。
  2. 头文件被重复引用的后果

    • 有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些。但是对于大工程来说,这也是不能忍受的;
    • 有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)这种会引起重复定义。
    • 这种方法只能解决一个文件中的重复引用问题。
  3. 这几句代码的意思

    • #ifndef = if not define 的缩写。
    • #define 宏定义
    • #endif 结束
    • 连起来,就是一个很简单的 if-else 语句。如果头文件没有被定义,就定义;否则就不用。
    • 请注意:如果 Part1 和 Part2 是两部分内容。如果没有定义过 Graph2.h ,定义它,并且执行 Part1 ;如果已经定义过了,那就执行 Part2。从另一个角度来看,Part1 的代码只会被执行一次。
原文地址:https://www.cnblogs.com/rongyupan/p/12487150.html