假设我有一个名为的头文件,其中包含我项目的inclusions.h
所有#include <...>
s。 inclusions.h
包括另一个名为 的头文件settings.h
,其中可以修改各种常量。
如果#include <math.h>
在 中inclusions.h
,是否settings.h
也可以访问数学库?还是我也必须#include <math.h>
进去settings.h
?
假设我有一个名为的头文件,其中包含我项目的inclusions.h
所有#include <...>
s。 inclusions.h
包括另一个名为 的头文件settings.h
,其中可以修改各种常量。
如果#include <math.h>
在 中inclusions.h
,是否settings.h
也可以访问数学库?还是我也必须#include <math.h>
进去settings.h
?
如果在 settings.h 之前包含 math.h,则 settings.h 也应该可以访问 math.h。但是为了确保访问(并指出依赖关系),您应该在需要它们的地方包含文件,在 math.h 中也是如此。
这取决于夹杂物的顺序。#include
是一个预处理器指令,仅通过文本替换工作。所以,如果inclusions.h
你有:
#include <math.h>
#include <settings.h>
设置“可以看到”数学。如果你有:
#include <settings.h>
#include <math.h>
它不能。但是:如果你在settings.h
其他地方使用而不包括math.h
之前会发生什么?所以最后尽量让每个包含文件独立。
在这种情况下,正如其他人所指出的那样,根据包含的顺序,它可能是可访问的。这是因为这些源文件是一个翻译单元的一部分(源 + 基本上包括),所以如果<math.h>
出现在 之前"settings.h"
,它可以被它查看。但是,如果设置成为另一个翻译单元的一部分,或者如果您决定移动某些包含,则可能会发生变化。为了“安全”,您应该只包含文件在该文件中所需的任何头文件。