Eva*_*ake 6 c++ include-guards
我想知道是否/什么包括文件一样守卫windows.h,math.h,iostream,stdio...等等.
因为我在不同的文件中多次包含这些标题.这些文件是否内置了防护装置或是否定义了定义?
我只是想知道这种标准的标准是什么.
Jon*_*ler 13
C++标准要求对标题进行组织,以便您可以直接或间接地多次包含它们,而不会遇到问题.它没有强制要求如何实现这一结果,只要它应该实现.
17.6.2.2标题[using.headers]
2翻译单元可以包括任何顺序的图书馆标题(第2条).每个可以被包括不止一次,除了每次包括
<cassert>或<assert.h>依赖于词汇当前定义的效果之外,没有任何效果与被恰好包括一次有效NDEBUG.178178这与标准C库相同.
Blu*_*rin 11
伙计,你是非常懒惰的,只需打开文件(你甚至可以在大多数编辑器中右键单击include指令),它从以下内容开始:
#ifndef _WINDOWS_
#define _WINDOWS_
...
Run Code Online (Sandbox Code Playgroud)
因此,第一次它将进入文件,因为_WINDOWS_未定义,因此将定义它,并将包含该文件的内容.第二次#ifndef因为之前完成定义而失败.
这是设置保护措施的标准方式,许多编译器支持的另一种方法是放置#pragma once.这有利于防止例如某人在另一个文件中定义相同常量的情况下的冲突.