c中全域性變數,全域性結構體使用
阿新 • • 發佈:2019-01-07
1)在A中定義的函式,如何在B中呼叫?
如果有標頭檔案,在標頭檔案中宣告,在B檔案中#include標頭檔案就可以了。
如果是在.c檔案中宣告的,在B中加extent宣告:extern void timer_hw_init(void);
2)在A中定義的結構體及變數,如何在B中呼叫?
1> 對於全域性結構體定義,首先在Globals.h標頭檔案中構造結構體,用typedef方式,如:
typedef struct tagLineType
{
int ID;
CString Type;
double r0;
double x0;
}LINETYPE; // 名稱可隨便
而後,在Globals.cpp檔案中:LINETYPE *lineType = NULL; // 注意,在這裡初始化
而後,回到Globals.h標頭檔案:
extern LINETYPE *lineType; // 注意,這裡不能再初始化
2> 對於普通全域性變數
int iTime = -1; // 注意,在這裡初始化
而後,在Globals.h標頭檔案中:
extern int iTime; // 注意,這裡不能再初始化
3> 對於全域性常量定義,首先再Globals.cpp中:
const int UB = 10;
而後在Globals.h標頭檔案中:
extern const int UB;
以上是第一種方法,是我自己總結試驗成功的。用該方法定義完畢後,無論哪個.cpp檔案要用到全域性變數,只需在該.cpp檔案中#include "Globals.h"即可,而無需再在.cpp檔案中extern,所有全域性變數、全域性常量、全域性結構體都是可見的。該方法的總體思路是,象theApp那樣,在.cpp中定義,在.h標頭檔案中extern宣告。另外要注意,變數的初始化一定在Globals.cpp檔案中,而不能在Globals.h標頭檔案中。
結構體:每個用到這個全域性結構體的檔案都要包含typedef的標頭檔案,宣告該結構體要在.c檔案中,而且不能包括在函式內。