全域性變數在標頭檔案中“定義”
阿新 • • 發佈:2019-01-03
看著標題,定義上面加了一個引號,這個得注意了。怎麼解釋呢,一般而言,變數只能定義在.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原始碼中體現的很明顯,生活中就是要不斷的學習,加油。