1. 程式人生 > >全域性變數在標頭檔案中“定義”

全域性變數在標頭檔案中“定義”

        看著標題,定義上面加了一個引號,這個得注意了。怎麼解釋呢,一般而言,變數只能定義在.c檔案中,宣告變數才在.h檔案中。下面就打破常規,把定義變數的語句放在.h檔案中,但是對實際而言,變數定義在標頭檔案中是表面上的。

        下面直接給出程式碼,有三個檔案a.h    a.c    main.c:

a.h裡面的程式碼:

#ifndef A_H
#define A_H
#ifdef A_C				//該句巨集定義一般放在相應的.c檔案中,當然也只能巨集定義一次
	int myVar = 0;
#else
	extern int myVar;		//如果沒定義其他的c檔案中沒定義該巨集,就相當於引用了該變數
#endif
extern void Print(void);
#endif

a.c裡面的程式碼:

#define A_C					//注意了該巨集定義,表示myVar是在c檔案中完成定義的
#include "a.h"
#include <stdio.h>
void Print(void)
{
	printf("myVar = %d\n", myVar);
}

main.c
#include "a.h"	//本檔案中沒定義A_C該巨集,相當於對myVar引用
int main()
{
	Print();
	myVar = 1;	//看到了麼,這裡面直接引用myVar變數
	Print();
	return 1;
}

講解完了,其實這些技巧在ucos原始碼中體現的很明顯,生活中就是要不斷的學習,加油。