【发布时间】:2022-11-14 02:47:10
【问题描述】:
我正在尝试执行此代码,并将其拆分为 .c 文件(比如说 file1.c 和 file2.c)和 file1.h 文件。我不允许更改可以发送给函数的参数,因此我需要找到另一种方法来“发送”/访问另一个变量。我试图在头文件file1.h 中将变量设为静态,并将其包含在file2.c 中。 file1.c 中的函数如下所示:
int function(int *array, int a, int b){
...
...
if(global_variable == 1){
point = array[(a+b)/2];
}else if(global_variable == 0){
point = array[b];
}
在file2.c 我有一个类似这样的函数:
double function2(t_sort_funcp fun, const case_t c, int array_length, result_t *buf, t_generate_array_funcp g_array){
int array[array_length];
switch (c)
{
case first:
global_variable = 1;
g_array(array, array_length);
return debugg(fun, array, array_length);
break;
case second:// Wors case is an inverted sorted array.
global_variable = 0;
g_array(array, array_length);
return debugg(fun, array, array_length);
break;
case third:
global_variable = 1;
g_array(array, array_length);
return debugg(fun, array, array_length);
break;
}
return 0;
}
在file1.h 我有:
#ifndef ALGORITHM_H
#define ALGORITHM_H
#include <stdbool.h> // bool
static int global_variable;
#endif
如您所见,我正在尝试更改file2.c 中的global_variable 变量并在file1.c 中使用它,但这不起作用,file1.c 中的 if 语句总是执行 else 语句中的代码,即使我将变量更改为 1。
注意:file2.c 总是在 file1.c 之前执行
【问题讨论】:
-
您应该在其中一个.c 文件中将
int global_variable;定义为全局,并将.h 文件更改为extern int global_variable;。仅将类型和声明放在 .h 文件中。 -
.h 文件中的标头保护不会阻止每个 .c 文件编译包括它。它们是独立编译的。
static关键字将范围限制为该文件。因此,在您的代码中,每个 .c 文件都有自己的名为global_variable的变量,仅在该编译单元中可见。
标签: c function global-variables header-files