1. 程式人生 > >c中全域性變數,全域性結構體使用

c中全域性變數,全域性結構體使用

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型)定義,首先在Globals.cpp中:
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檔案中,而且不能包括在函式內。