今天在頭文件.h中初始化了一個數組和函數,在編譯的時候提示這個數組和函數重新定義了,檢查后發現,犯了一個致命的錯誤,在頭文件中定義變量。。。
以下引用別人的一篇說明,警示自己。
C語言作為一種結構化的程序設計語言,在模塊的划分上主要依據功能,C語言模塊化程序設計需理解如下概念:
(1) 模塊即是一個.c文件和一個.h文件的結合,頭文件(.h)中是對於該模塊接口的聲明;
(2) 某模塊提供給其它模塊調用的外部函數及數據需在.h中文件中冠以extern關鍵字聲明;
(3) 模塊內的函數和全局變量需在.c文件開頭冠以static關鍵字聲明;
(4) 永遠不要在.h文件中定義變量!定義變量和聲明變量的區別在於定義會產生內存分配的操作,是匯編階段的概念;而聲明則只是告訴包含該聲明的模塊在連接階段從其它模塊尋找外部函數和變量。如:
int a = 5;
#include "module1.h"
#include "module1.h"
#include "module1.h"
以上程序的結果是在模塊1、2、3中都定義了整型變量a,a在不同的模塊中對應不同的地址單元,這個世界上從來不需要這樣的程序。正確的做法是:
extern int a;
#include "module1.h" int a = 5;
#include "module1.h"
#include "module1.h"
這樣如果模塊1、2、3操作a的話,對應的是同一片內存單元。
原博客:http://blog.chinaunix.net/uid-27656723-id-3345302.html