标题: Include Guards 分类: C/C++ 创建: 2023-11-05 00:17 修改: 链接: http://0x2531.tech/c/202311050017.txt -------------------------------------------------------------------------------- 在较大型 C/C++ 程序中,往往需要包含多个头文件,头文件也会包含其它头文件,这就会出现一个头文件被多次 包含的情况。编译器本身不会处理此类情况,而是将头文件的内容多次复制到源代码文件中,这可能会导致编译错 误,如:重复定义等。 为了解决这个问题,通常在头文件中使用预处理器指令 #ifndef、 #define 和 #endif 来避免头文件的内容 被多次包含。这种技术通常被称为“Include Guards”。 举个例子,现有头文件 header.h,可以通过如下模版来编写该头文件: === #ifndef _HAVE_HEADER_H #define _HAVE_HEADER_H // 头文件的内容 #endif === 在这个例子中,如果 _HAVE_HEADER_H 已经被定义,那么头文件的内容就不会被包含。这样就可以避免同一个头 文件被多次包含的问题。 所以,虽然编译器本身不会优化多次包含同一个头文件的情况,但我们可以通过 Include Guards 技术来避免这 个问题。