2014-09-02 19 views
-2

假設有一個頭文件:a.h 和源文件:a1.c a2.c ... an.c; n> = 1,這意味着它可能只有一個源文件,或者有多個源文件。如何定義跨多個.c文件可見的全局變量

我的問題是,如何在a.h中定義一個全局變量g;這應該由a1.c ... an.c.可見

有限制:

  1. 在a1.c a2.c ... an.c; 「a.h」只能包含在第一行,這意味着在#include「a.h」行之前的源文件中不應該有代碼。g必須在a.h中定義。

  2. 可以僅由下面的方式編譯代碼:

    gcc -c a1.c -o a1.o 
    ...  
    gcc -c an.c -o an.o 
    gcc -o a.exe a1.o ... an.o 
    

有,在A.H這樣限定g的答案: 的extern INT克;然而,根據c的規範J.5.11;這是未定義的行爲。

有沒有其他解決方案?

+3

你需要學習句子的第一個如何大寫字母。 – Krypton 2014-09-02 01:44:43

+0

您正在尋找['extern'](http://en.cppreference.com/w/cpp/language/storage_duration)關鍵字。 – 2014-09-02 01:46:31

+1

請參閱:[**如何在C **中正確使用extern關鍵字](http://stackoverflow.com/questions/496448/how-to-correctly-use-the-extern-keyword-in-c) – 2014-09-02 01:56:03

回答

3

正如你所說的,必須在c文件中定義變量,並且聲明應該位於頭文件中。
你必須在任何c文件中定義一個全局變量並在頭文件中聲明'extern'。

例)

1) define global variable in a1.c 
    int g; 

2) declare global variable in a.h 
    extern int g; 

3) include header file in other c files 
    #include "a.h" 
    // to do something