看著標題,定義上面加了乙個引號,這個得注意了。怎麼解釋呢,一般而言,變數只能定義在.c檔案中,宣告變數才在.h檔案中。下面就打破常規,把定義變數的語句放在.h檔案中,但是對實際而言,變數定義在標頭檔案中是表面上的。
下面直接給出**,有三個檔案a.h a.c main.c:
a.h裡面的**:
[csharp]view plain
copy
print?
#ifndef a_h
#define a_h
#ifdef a_c //該句巨集定義一般放在相應的.c檔案中,當然也只能巨集定義一次
intmyvar = 0;
#else
extern
intmyvar;
//如果沒定義其他的c檔案中沒定義該巨集,就相當於引用了該變數
#endif
extern
void
print(
void
);
#endif
a.c裡面的**:
[cpp]view plain
copy
print?
#define a_c //注意了該巨集定義,表示myvar是在c檔案中完成定義的
#include "a.h"
#include
void
print(
void
)
main.c
[cpp]view plain
copy
print?
#include "a.h" //本檔案中沒定義a_c該巨集,相當於對myvar引用
intmain()
講解完了,其實這些技巧在ucos源**中體現的很明顯,生活中就是要不斷的學習,加油。
C語言在標頭檔案定義全域性變數的技巧
在剛開始學習c語言的時候,可能很多人都聽過前輩說要少用goto,少用do while 不要在標頭檔案定義全域性變數等,但實際上每個特性都有其合適的應用場合,只要正確的使用是不會有問題的,相反還可能給 帶來好處。一般來說,我們寫程式的時候都不會定義特別多的全域性變數,這也是需要遵守的原則之一 但凡事都...
能否在標頭檔案中定義全域性static變數?
能否在標頭檔案中定義全域性static變數?一 在沒有類定義的標頭檔案中定義全域性static變數g static。用gcc和g 都可以編譯。但執行結果顯示,在test.c和main.c中,變數的值相同,但位址不同,說明是兩個變數。frank userver project test static ...
關於標頭檔案中定義的全域性變數的包含
在標頭檔案中定義了乙個變數,若另乙個檔案包含此檔案則會再產生乙個相同變數的定義,在linux環境中編譯時會發生如 menu.o sbss 0x0 multiple definition of is refresh living time thread created main.o sbss 0x0 ...