.h文件可以看到彼此之间的内容而不包括在内吗?我知道当我在C中编程之前我可以使用其他.h文件的.h文件中的变量而没有#include“myfile.h”。我试图在C ++中做同样的事情,并且我一直在“定义超出范围错误”
答案 0 :(得分:2)
不直接。但是,如果.cc
或.c
文件#include
是一个文件,那么之后的所有标题#include
将看到该标题的内容。原因是#include
的行为类似于复制和粘贴:每个文件内容都有效地转储到一个大文件中,编译器只能看到组合结果。例如,如果你有:
foo.cc:
#include <a.h>
#include <b.h>
#include <c.h>
// foo.cc's contents
即使b.h
没有#include a.h
,它的定义仍然在bh中可见,因为编译器看到所有标题的内容就好像它们一样foo.cc
的一部分。这在实践中可能相当成问题,因为程序依赖于它们未明确包括的定义。当有人更改a.h
时,您可以开始在b.h
(或之后的任何标题#include
d)中看到错误。
但我不认为这完全回答了你的问题,因为单独这个过程不应该导致任何“定义超出范围”的错误。小心发布有问题的代码示例?
答案 1 :(得分:0)
.h文件中的变量是一种不稳定的情况,因为当你#include
一个头文件时,它只是粘贴到你的源文件中。因此,如果您在头文件中有int j;
并将其包含在其他源文件中,那么您基本上只定义了几个名为j
的不同变量,这当然是一个错误。
答案 2 :(得分:0)
不,在C或C ++中都没有。通常情况下,标题是间接包含的,这可能是您以前的经历中发生的。
答案 3 :(得分:0)
在C和C ++中,除非将其加载到已编译的单元(通常是.c或.cpp文件)中,或者显式声明它,否则任何内容都不可见。
您可以使用“extern”
转发声明变量extern int somewhere_else; // now the somewhere_else defined elsewhere can be seen here
较早的C编译器可能对前向声明的需要更加宽容。