gpt4 book ai didi

c - 处理在c文件而不是头文件中定义的变量

转载 作者:太空宇宙 更新时间:2023-11-04 03:52:51 25 4
gpt4 key购买 nike

我不知名的前任离开了代码。我尝试使用其中的一些,但他的代码看起来很不寻常。

1.他所做的是在 c 文件而不是头文件中定义变量:variables.c

CHGR_CMD comand[MAX_COMANDS] __attribute__ ((section ("external"))); 
RAWDAT rawdat[MAX_RAWDAT] __attribute__ ((section ("external")));
SC_TEST *curr_test[NUMCHANS]; /* array of pointers to current testrec */
SC_TESTSETUP chparam[NUMCHANS] __attribute__ ((section ("external")));
SC_HOLDSTAT stats[NUMCHANS] __attribute__ ((section ("external")));
RAWDAT *bufs[NUMCHANS];
//FACTS control[NUMCHANS];

short ntest;
short new_dbuff;
short start_err;
short update_status;
long status_sent;
short load_done;
char h_lok; ....

2 init_vars() 在另一个 c 文件中初始化以上变量:init_vars.c

memset((char *) rawdat,0 ,sizeof(rawdat));
memset((char *) curr_test,0 ,sizeof(curr_test));
memset((char *) chparam,0 ,sizeof(chparam));
memset((char *) stats,0 ,sizeof(stats));
memset((char *) bufs,0 ,sizeof(bufs));

memset((char *) comand,0 ,sizeof(comand));
ntest = 0;
new_dbuff = 0;

start_err = 0;

3.在main.c中调用init_vars()

我第一次尝试直接在 init_vars.c 中包含“variables.c”,但它给了我以下错误:

#10056 symbol "ad_lok" redefined: first defined in "./variables.obj"; redefined in "./init_vars.obj"    sCharger_Test_v1            C/C++ Problem

不仅是ad_lok变量,variables.c中定义的每一个变量都命中错误。

将 variables.c 更改为 variables.h 仍然会出现相同的错误。

我如何处理变量定义的 c 文件而不是头文件?

谢谢

最佳答案

因为 variables.c 没有声明变量或预处理器宏,但实际上定义这些变量,所以你需要让它们在 extern 中“包含”阶段,并将它们定义在一个文件中(例如,externs_definitions.c)。

例如:

变量.h

#ifndef VARIABLES_H
#define VARIABLES_H
extern CHGR_CMD comand[MAX_COMANDS] __attribute__ ((section ("external")));
extern RAWDAT rawdat[MAX_RAWDAT] __attribute__ ((section ("external")));
extern SC_TEST *curr_test[NUMCHANS]; /* array of pointers to current testrec */
...
#endif /* VARIABLES_H_ */

然后保留 variables.c 原样。

然后在init_vars.c

#include "variables.h"

还有更多问题;该代码目前如何工作?如果 init_vars.c 不直接包含 variables.c 并且没有头文件将它们声明为 extern ,现有代码如何不失败预处理器试图访问未声明的变量?

关于c - 处理在c文件而不是头文件中定义的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com