
_START_ARTICLE_
前向声明
_START_PARAGRAPH_
在程序设计中，前向声明（Forward Declaration）是指声明标识符(表示编程的实体，如数据类型、变量、函数)时还没有给出完整的定义。
_START_SECTION_
例子
_START_PARAGRAPH_
一个简单的C/C++例子：_NEWLINE_void printThisInteger(int);_NEWLINE_在C++中, 上行代码是一个函数的前向声明，也是该函数的原型。编译器处理该行源码后，允许程序员在随后的程序中引用函数printThisInteger; 不过程序员必须在某处提供这个被声明的函数的定义:_NEWLINE_void printThisInteger(int x) {_NEWLINE_   printf("%d\n", x);}_NEWLINE_在Pascal与其它Wirth型的编程语言中, 一般规则是所有实体必须在使用前被声明. C语言适用同样的规则, 但存在未声明的函数与不完备的数据类型这样的特例. 因此，C语言允许(虽然不够明智)实现一对相互递归函数:_NEWLINE_int first(int x) {_NEWLINE_   if (x == 0)_NEWLINE_      return 1;_NEWLINE_   _NEWLINE_   return second(x-1);}int second(int x) {_NEWLINE_   if (x == 0)_NEWLINE_      return 0;_NEWLINE_   _NEWLINE_   return first(x-1);}_NEWLINE_在Pascal程序中, 同样的实现要求在first引用second前，必须有一个second的前向声明. 如果没有这个前向声明, 编译器将产生编译错误，指出标识符second未经声明即被使用.
_START_SECTION_
前向引用
_START_PARAGRAPH_
前向引用(英语：forward reference)有时被用作前向声明的同义词。但是，它更经常被用作一个实体在声明前即被实际使用; 例如, 上述代码中second第一次使用就是前向引用。因此，可以说在Pascal中, 前向声明是强制要求，前向引用是被禁止的._NEWLINE_C++中前向引用的例子:_NEWLINE_class C {public:_NEWLINE_   void mutator(int x) { myValue = x; }_NEWLINE_   int accessor() { return myValue; }private:_NEWLINE_   int myValue;};_NEWLINE_在此例中，对myValue的两次引用早于它的声明. C++一般禁止前向引用, 但是允许在类成员的特殊场合下使用前向引用。因此，成员函数accessor不能被编译直到编译器获知成员变量myValue的类型, 编译器有责任记住accessor的定义直到它看到myValue的声明._NEWLINE_允许前向引用大大增加了编译器的复杂度与内存需求，并且使它不能成为一次通过型的编译器。