可以将标头文件包含在多个源文件中,而无需重复保护
Can a header file be included in multiple source files, without duplicate protection
大多数标头文件都包裹其内容:
#ifndef MY_HEADER_H
#define MY_HEADER_H
// header body...
#endif MY_HEADER_H
如果删除了,当将标头文件加入多个源文件中时会导致问题吗?还是预处理器足够聪明以忽略它?(我知道当它多次包含在同一源文件中时会导致问题)
如果将其删除,将在多个源文件中加入标头文件时会引起问题?
否。当将标头文件多次包含在同一源文件中时,可能会导致问题。
或预处理器足够聪明以忽略它?
否。预处理器一次不知道多个源文件。
如果删除了这一点,是否会在包含标头文件时引起问题...
可能,是的。不必要。通常,这取决于。特别是,这取决于标头的内容以及是否将标头包含在单个翻译单元(tu)中。可以重复一些声明 - 其他声明可能不会。例如,不得重复定义。
...在多个源文件中?
标头是否具有后卫宏与包含在多个tus中的标题无关。每个TU分别预处理,并且警卫不会阻止将其纳入多个TU。
标头包含可能未包含在一个以上的TU中的定义(例如非内部功能的定义),则标题通常不是很有用(尽管存在一个实际示例:某些标头 - 只有库提供了一种包含自己的main
功能定义的方法)。
预处理器如何知道忽略它是正确的事情?例如,考虑以下标头文件" foobar.h":
FOO(BAR);
和以下C代码:
int main()
{
#define FOO printf
#define BAR "hello"
#include "foobar.h"
#undef BAR
#define BAR " worldn"
#include "foobar.h"
}
在这里,忽略第二次尝试包含文件的尝试将破坏程序的行为。
因此,由于编译器不知道忽略它是正确的事情,所以它不能忽略它。因此,如果您要它忽略它,就必须告诉它。
相关文章:
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 为什么在保护模式下继承升级不起作用
- 访问被拒绝后,c++中的故障保护代码
- C++:无法访问声明的受保护成员
- 为测试目标创建具有不同源文件夹的文件
- 为什么您需要C++头文件的包含保护
- lock_guard是否保护返回值
- 将图像添加到资源文件夹UWP C++
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 视觉工作室项目.提取源文件夹名称
- 生成一个生成文件,该生成文件使用Automake在一个步骤中编译和链接所有源文件
- 继承和友元函数,从基类访问受保护的成员
- make 命令如何避免重新编译未更改的源文件?
- 为什么派生类的好友不能使用受保护的成员?
- C++:为什么无法在派生类中访问受保护的构造函数?
- C++两个源文件之间共享的枚举的静态实例
- 如何使用Qt 3D库加载和显示搅拌机.obj源文件场景
- 将源文件扩展名从 .m 更改为 .mm 在屏幕保护程序项目的 Xcode 9.3 中失败
- 可以将标头文件包含在多个源文件中,而无需重复保护
- 保护生成的源文件