我正在嘗試執行此代碼,并將其拆分為.c檔案(比如說file1.cand file2.c)和file1.hfile. 我不允許更改可以發送給函式的引數,因此我需要找到另一種方法來“發送”/訪問另一個變數。我試圖在頭檔案中使變數靜態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
如您所見,我正在嘗試更改global_variable變數file2.c并使用它,file1.c但這不起作用file1.c,即使我將變數更改為 1,if 陳述句總是執行 else 陳述句中的代碼。注意:file2.c總是在之前執行file1.c
uj5u.com熱心網友回復:
反其道而行之
#ifndef ALGORITHM_H
#define ALGORITHM_H
#include <stdbool.h> // bool
extern int global_variable;
#endif
在 .c 檔案之一中
int global_variable;
.h在需要訪問此變數的所有檔案中包含該檔案。
static在全域范圍內使變數僅在一個編譯單元(檔案)中可用。
uj5u.com熱心網友回復:
您可以extern與cpp條件一起使用。
以下是示例檔案。
檔案:file1.h
#ifndef ALGORITHM_H
#define ALGORITHM_H
#include <stdbool.h> // bool
#ifdef FILE1_C
int global_variable;
#else
extern int global_variable;
#endif
#endif
檔案:file1.c
// I am file1.c
#define FILE1_C
#include "file1.h"
檔案:file2.c
// I am file2.c
#include "file1.h"
更新:
絕對是錯誤的方式。為什么會出現這種奇怪的 ifdef 并發癥 – 0___________
不,這不是錯誤的方式。我一直這樣做。這個想法是你在同一個地方/檔案中有兩個定義。如果將全域放在.c檔案中,則很難查看是否更改了型別。
這是一個更擴展的案例:
#ifndef ALGORITHM_H
#define ALGORITHM_H
#include <stdbool.h> // bool
#ifdef FILE1_C
#define EXTRN_FILE1 /**/
#else
#define EXTRN_FILE1 extern
#endif
EXTRN_FILE1 int global_variable;
EXTRN_FILE1 double global_variable_2;
#ifdef FILE1_C
int global_variable_3 = 37;
#else
extern int global_variable_3;
#endif
#endif
而且,我們可能希望將全域變數放在不同的.c檔案中。如果我們重命名FILE1_C為 (eg) DEFINE_GLOBALS,我們可以放入#define DEFINE_GLOBALS任何.c. 如果我們稍后改變主意,將#definefrom (eg)移動file1.c到file2.c.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/532729.html
標籤:C功能全局变量头文件
上一篇:強制python函式引數沒有順序
