C包括守卫
C include guard
当file1.c
第一次包含inc.h
(包含守护#ifndef INC_H
)时,执行#define INC_H
。但是现在,当另一个file2.c
包含相同的inc.h
时,宏INC_H
是否已经定义,所有这些都是相同的故事,以前的定义不会在这里传播?
宏定义在不同的编译之间不保留。
但是现在,当另一个file2.c包含相同的INC_H时,宏INC_H是否已经定义,
Yes and No。这取决于.
-
如果
file2.c
包含一些包含inc.h
的头,那么yes,INC_H
已经为file2.c
定义了。对于任何级别的包含都是如此。 -
Else, no未定义
保护防止头文件被间接或直接地包含在文件中不止一次!
当您编译file2.c
时,编译器将重新启动。编译file1.c
时定义的预处理器符号在编译file2.c
时不起作用
定义不会在*.c
文件之间传播。如果它们是,那么您首先就不需要*.h
文件。(然而,您可以#include
*.c
文件,但那是另一回事。)
不,想一下" #include
"是做什么的。它实际上是将头文件的内容复制到包含它的地方。
所以INC_H
将在.c
文件中第一次包含inc.h
时被定义。但是,这对另一个。c文件没有任何改变。
包含保护非常有用。在这些情况下,您可以使用警卫来避免麻烦。
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 为什么 cmake 许可证<>样式不包括?
- 计算平均值,不包括上次得分
- 从多个源构造一个对象,包括一个对象向量
- 在编译中包括 Botan 2
- 将值从另一个数组写入数组,不包括不需要的值 C++
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- 包括C++头文件
- CPP 包括 Azure DevOps 中的目录设置
- 包括STL,而不会乱扔全球范围
- 如何反转我的输入,包括否定
- 包括没有完整路径的我的库
- 如何在 android ndk 上链接 C 和 C++ 代码,以及 C 和 C++ 运行时库(包括 STL)?
- C++包括类名间距和类实例化
- 链接错误,包括我创建的相同头文件 - C++
- 标头,包括在 Swift 项目中使用C++文件时的错误
- 如果语句不包括文本行?
- 米斯拉警告包括守卫
- C包括守卫