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