fbpx
维基百科

前向声明

程序设计中,前向声明Forward Declaration)是指提前声明,但还没有给出完整的定义的标识符(表示编程的实体,如数据类型、变量、函数)。

例子

一個簡單的C/C++例子:

void printThisInteger(int); 

C++中, 上行代码是一个函数的前向声明,也是该函数的原型。编译器处理该行源码后,允许程序员在随后的程序中引用函数printThisInteger; 不过程序员必须在某处提供这个被声明的函数的定义:

void printThisInteger(int x) {  printf("%d\n", x); } 

Pascal与其它Wirth型的编程语言中, 一般规则是所有实体必须在使用前被声明. C语言适用同样的规则, 但存在未声明的函数与不完备的数据类型这样的特例. 因此,C语言允许(虽然不够明智)实现一对互递归函数:

// 前向声明 int second(int); int first(int x) {  if (x == 0)  return 1;    return second(x-1); } int second(int x) {  if (x == 0)  return 0;    return first(x-1); } 

在Pascal程序中, 同样的实现要求在first引用second前,必须有一个second的前向声明. 如果没有这个前向声明, 编译器将产生编译错误,指出标识符second未经声明即被使用.

前向引用

前向引用(英語:forward reference)有时被用作前向声明的同义词[1]。但是,它更经常被用作一个实体在声明前即被实际使用; 例如, 上述代码中second第一次使用就是前向引用[2][3]。因此,可以说在Pascal中, 前向声明是强制要求,前向引用是被禁止的.

C++中前向引用的例子:

class C { public:  void mutator(int x) { myValue = x; }  int accessor() { return myValue; } private:  int myValue; }; 

在此例中,对myValue的两次引用早于它的声明. C++一般禁止前向引用, 但是允许在类成员的特殊场合下使用前向引用。因此,成员函数accessor不能被编译直到编译器获知成员变量myValue的类型, 编译器有责任记住accessor的定义直到它看到myValue的声明.

允许前向引用大大增加了编译器的复杂度与内存需求,并且使它不能成为一次通过型的编译器。

参考资料

  1. ^ MSDN: Converting to a Forward-Reference Class Type. [2011-08-01]. (原始内容于2008-03-28). 
  2. ^ 存档副本 (PDF). [2011-08-01]. (原始内容 (PDF)于2016-03-03). 
  3. ^ Thinking in C++: Inlines & the compiler. [2011-08-01]. (原始内容于2011-07-09). 

前向声明, 在程序设计中, forward, declaration, 是指提前声明, 但还没有给出完整的定义的标识符, 表示编程的实体, 如数据类型, 变量, 函数, 例子, 编辑一個簡單的c, 例子, void, printthisinteger, 在c, 上行代码是一个函数的, 也是该函数的原型, 编译器处理该行源码后, 允许程序员在随后的程序中引用函数printthisinteger, 不过程序员必须在某处提供这个被声明的函数的定义, void, printthisinteger, printf, 在pas. 在程序设计中 前向声明 Forward Declaration 是指提前声明 但还没有给出完整的定义的标识符 表示编程的实体 如数据类型 变量 函数 例子 编辑一個簡單的C C 例子 void printThisInteger int 在C 中 上行代码是一个函数的前向声明 也是该函数的原型 编译器处理该行源码后 允许程序员在随后的程序中引用函数printThisInteger 不过程序员必须在某处提供这个被声明的函数的定义 void printThisInteger int x printf d n x 在Pascal与其它Wirth型的编程语言中 一般规则是所有实体必须在使用前被声明 C语言适用同样的规则 但存在未声明的函数与不完备的数据类型这样的特例 因此 C语言允许 虽然不够明智 实现一对互递归函数 前向声明 int second int int first int x if x 0 return 1 return second x 1 int second int x if x 0 return 0 return first x 1 在Pascal程序中 同样的实现要求在first引用second前 必须有一个second的前向声明 如果没有这个前向声明 编译器将产生编译错误 指出标识符second未经声明即被使用 前向引用 编辑前向引用 英語 forward reference 有时被用作前向声明的同义词 1 但是 它更经常被用作一个实体在声明前即被实际使用 例如 上述代码中second第一次使用就是前向引用 2 3 因此 可以说在Pascal中 前向声明是强制要求 前向引用是被禁止的 C 中前向引用的例子 class C public void mutator int x myValue x int accessor return myValue private int myValue 在此例中 对myValue的两次引用早于它的声明 C 一般禁止前向引用 但是允许在类成员的特殊场合下使用前向引用 因此 成员函数accessor不能被编译直到编译器获知成员变量myValue的类型 编译器有责任记住accessor的定义直到它看到myValue的声明 允许前向引用大大增加了编译器的复杂度与内存需求 并且使它不能成为一次通过型的编译器 参考资料 编辑 MSDN Converting to a Forward Reference Class Type 2011 08 01 原始内容存档于2008 03 28 存档副本 PDF 2011 08 01 原始内容存档 PDF 于2016 03 03 Thinking in C Inlines amp the compiler 2011 08 01 原始内容存档于2011 07 09 取自 https zh wikipedia org w index php title 前向声明 amp oldid 70948541, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。