2015-12-24 39 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。