首先需要搞清楚什么是定義(definition ),什么是聲明(declaration)。
一、函數
函數的聲明:
int myfunc(int a,int b);
定義:
int myfunc(int a,int b){ return a+b; }
.h中雖然可以聲明然后定義函數,但是這樣這.h就只能被#include一次,否則就會出現重定義錯誤:
Error LNK2005 _myfunc already defined in xxx.obj
所以盡量不要再.h中定義函數。
二、變量
變量的聲明:
extern int a;
如果聲明包含初始化表達式,就被當作定義,即使前面加了extern。只有當extern聲明位於函數外部時,才可以被初始化。所以extern聲明時不要初始化。
定義:
int a;//a是一個整型外部變量
外部變量定義和外部變量聲明的含義是不同的。外部變量的定義只能有一次,它的位置在所有函數之外,而同一文件中的外部變量的聲明可以有多次,它的位置可以在函數之內,也可以在函數之外。
以下是良好的程序設計風格和慣例:
頭文件(.h)中進行函數聲明,源文件(.c)中進行函數的定義;
變量的聲明統一放到頭文件;
參考:http://www.cnblogs.com/magicsoar/p/3702365.html