2015-12-24 190 views
0

我有一個2個文件的模塊:頭文件(module.h)和實現文件(module.c)。該模塊的功能在另一個.c文件中使用。模塊的全局變量

我想要一個模塊有一個全局變量,每次調用此模塊的函數時都不會重新初始化。所述變量將僅在模塊內被修改。

爲了讓您更好的畫面:

module.c

int glob_var; 
int func(); //It modifies `glob_var`'s value 

main.c

#include "module.h" 
func(); 

我怎麼能去呢?

+2

使其成爲靜態。 –

回答

0

的module.c:

static int glob_var; 
int func(); //It modifies glob_var's value 

main.c中:

#include "module.h" 
func() 
+1

請使用代碼格式設置代碼 – Barmar

2

所述可變將我只從模塊

內進行修改由於變量是要只需在func()中修改/需要,您不需要它作爲全局變量。在func()之內聲明它爲static

int func(void) 
{ 
    static int var = 0; 
    /* Do stuff */ 

    /* Modify 'var' */ 
} 

一般來說,你應該儘量避免使用全局變量。在你的情況下,你不需要它。請注意,當func()被調用多次時,var將不會重新初始化,因爲它是一個static變量。

+0

我試着在今天晚上玩遊戲,但聲明var static似乎並沒有做到這一點,既不是在聲明內部也不是在fun()之外。是否有必要提到func實際上是一個主函數,module.c是一個通過exec *函數執行的程序?所以我想要的是模塊的主要功能在兩次調用之間保留其數據。像:execl(「mymodule」,(char *)NULL)使var的值爲1,另一個exec'「mymodule」,(char *)NULL)使它成爲兩個。謝謝。 – WIlopu

+0

*「重要的是要提到func實際上是一個主要功能,module.c是我通過exec * functions執行的程序」* No. *「所以我想要的是模塊的主要功能保留其數據兩個調用。像:execl(「mymodule」,(char *)NULL)使var的值爲1,另一個exec'「mymodule」,(char *)NULL)使它成爲兩個「*」。這就是它不「工作」的原因。 'exec *'函數不像正常的函數調用。他們將您的過程映像重新分配一個新的。他們根本不*返回*。 –

1

你也可以使用靜態修飾符到你的glob_var。