1

假设我有一个名为的头文件,其中包含我项目的inclusions.h所有#include <...>s。 inclusions.h包括另一个名为 的头文件settings.h,其中可以修改各种常量。

如果#include <math.h>在 中inclusions.h,是否settings.h也可以访问数学库?还是我也必须#include <math.h>进去settings.h

4

3 回答 3

5

如果在 settings.h 之前包含 math.h,则 settings.h 也应该可以访问 math.h。但是为了确保访问(并指出依赖关系),您应该在需要它们的地方包含文件,在 math.h 中也是如此。

于 2010-11-19T14:21:33.450 回答
3

这取决于夹杂物的顺序。#include是一个预处理器指令,仅通过文本替换工作。所以,如果inclusions.h你有:

#include <math.h>
#include <settings.h>

设置“可以看到”数学。如果你有:

#include <settings.h>
#include <math.h>

它不能。但是:如果你在settings.h其他地方使用而不包括math.h之前会发生什么?所以最后尽量让每个包含文件独立。

于 2010-11-19T14:24:44.673 回答
1

在这种情况下,正如其他人所指出的那样,根据包含的顺序,它可能是可访问的。这是因为这些源文件是一个翻译单元的一部分(源 + 基本上包括),所以如果<math.h>出现在 之前"settings.h",它可以被它查看。但是,如果设置成为另一个翻译单元的一部分,或者如果您决定移动某些包含,则可能会发生变化。为了“安全”,您应该只包含文件在该文件中所需的任何头文件。

于 2010-11-19T14:25:33.173 回答