【发布时间】:2019-04-24 07:02:39
【问题描述】:
告诉编译器只包含一次文件有什么意义?默认情况下没有意义吗?是否有任何理由多次包含一个文件?为什么不只是假设呢?是否与特定硬件有关?
【问题讨论】:
-
是否有任何理由多次包含单个文件? => 可能。一个文件中可能有条件编译
#ifdefs。所以你可能会说#define MODE_ONE 1,然后是#include "has-modes.h",然后是#undef MODE_ONE,又是#define MODE_TWO 1和#include "has-modes.h"。预处理器对这些事情是不可知的,也许有时它们是有意义的。 -
默认设置是有意义的。只是当 C 程序员仍然骑马、携带枪支并拥有 16KB 内存时,他们选择的不是那个
-
你可以在同一个源文件中多次包含
<assert.h>,NDEBUG的定义不同。 -
至于
#pragma once本身,在某些硬件环境(通常带有网络驱动器和可能通往同一标头的多个路径)中它无法正常工作。 -
如果您假设
#pragma once,那么取消该默认值的方法是什么?#pragma many?有多少编译器实现了这样的功能?