[參考原文](http://stackoverflow.com/questions/1410563/what-is-the-difference-between-a-definition-and-a-declaration%20%E5%8F%82%E8%80%83%E5%8E%9F%E6%96%87)
變量聲明:編譯器被通知變量存在,不用為**變量申請內存單元**。
變量聲明包含變量標識符,變量類型,extern修飾 這些信息。不管是新建類型,對象,函數聲明,聲明是編譯器所需要的,聲明告訴編譯器需要接受對這個標識符的引用。聲明有如下形式。
~~~
externint bar;
externint g(int,int);
// extern can be omitted for function declarations,函數申明可以省略
double f(int,double);
// no extern allowed for type declarations,對于類型聲明省略extern也是行的
extern class foo;
~~~
變量定義:編譯器為**變量申請內存**,就是變量定義。
包含變量類型,變量標識符這些信息;定義的本質是實例化或者說實現這個標識符,表現就是在內存中申請一個跟類型等量空間大小的內存空間。變量定義是連接器所需要的,連接器通過變量定義來引用到他們的實體內存空間。下面這些是上面聲明的定義:
~~~
int bar;
int g(int lhs,int rhs){return lhs*rhs;}
double f(int i,double d){return i+d;}
class foo {};
~~~