IM有点混乱。是什么向前声明和前瞻性的参考之间的区别?远期声明,在我的头上,当你宣布,心不是没有实现的功能,但是这是不正确的?你必须看指定的局面要么宣布的情况下,“向前参考”或“提前声明”?

有帮助吗?

解决方案

维基百科

  

转发宣言

     

中尚未定义的变量或函数的声明。其defnition以后可以看到。

     

转发参考

     

要向前声明但是其中出现的变量或函数类似的第一定义也到位。

其他提示

A 转发声明是一个方法或变量的声明您实施和使用它之前。前向声明的目的是节省编译时间。

变量的前向声明导致存储空间被搁置,所以可以以后设置该变量的值。

函数的提前声明也被称为“功能的原型,”是一个声明语句告诉编译器函数的返回类型是什么,该功能的名称是什么,以及它的类型参数。在语言如C / C ++和Pascal编译器店宣布符号(包括函数)的查找表,并且引用他们,因为它在你的代码遇到他们。这些编译器阅读你的代码顺序,即,从上到下,所以如果你不向前声明,编译器发现它不能在查找表中引用的象征,它提出了一个错误,它不知道如何响应的功能。

在向前声明是一个暗示到已定义(填写的执行)的功能在别处的编译器。

例如:

int first(int x); // forward declaration of first

...

int first(int x) {
   if (x == 0) return 1;
   else return 2;
}

但是,你问,我们为什么不只是让编译器进行两次传中每个源文件:第一个索引的所有符号里面,第二个解析引用,并看看他们?根据Dan故事:

  

当下在1972年创建的,计算资源被更加稀少   并以高溢价 - 所需的内存来存储复杂   程序的整个符号表一次根本不是可用   大多数系统。固定存储也是昂贵的,极其缓慢的,所以   想法像虚拟存储器或符号表中的存储部件   磁盘根本不会允许编译在一个合理的   时间表...当你处理磁带,其中寻道时间   在几秒钟内进行测量和读取吞吐量以每字节为单位   第二(未千字节或兆字节),这是非常有意义的。

     

C ++,而创建的几乎17年后,被定义为一个超集   的C,因此不得不使用相同的机制。

     

通过将Java在1995年推出身边的时候,平均电脑有足够的   内存拿着象征性的表,即使是一个复杂的工程,是   不再大幅负担。而Java并没有设计成   以C向后兼容,所以它没有必要采用旧式   机制。 C#为同样未支配。

     

其结果是,他们的设计者选择转移的负担   compartmentalizing象征性的声明背过程序员和   把它放在电脑上再次,自比例成本的   汇编的总工作量是最小的。

在Java和C#,标识符被自动从源文件识别并直接从动态库符号读取。在这些语言中,不需要头文件出于同样的原因。

一个的前向参考是相反的。它指的是它的声明之前使用的实体。例如:

int first(int x) {
   if (x == 0) return 1;
   return second(x-1); // forward reference to second
}

int second(int x) {
   if (x == 0) return 0;
   return first(x-1);
}

请注意“前方参照”有时使用,尽管不经常,作为同义词“前向声明。”

前向声明用于允许一个语言(C,帕斯卡)。的单通汇编

如果向前引用允许无(Java和C#),则需要两次通过编译器向前声明。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top