gpt4 book ai didi

c - as400 ILE C 全局变量多重重定义

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:07 24 4
gpt4 key购买 nike

我在 as400 上有一个 ILE C projet,当我链接它时,如果我将全局变量放在外部,它会给我一个全局变量的多重重新定义错误或 undefined reference 。

这是最简单形式的代码:

主要内容:

#include "Header1"

int main(int argc, char** argv){
int x = Foo();
return 0;
}

标题 1

#ifndef HEADER1
#define HEADER1

struct MyStruct{
int x;
};

struct MyStruct g_myStruct; /* My global struct variable. */

int Foo(void);

#endif

Header1 实现

#include "Header1"
#include "Header2"

int Foo(void){
g_myStruct.x = 432;
return Bar();
}

标题2

#ifndef HEADER2
#define HEADER2

int Bar(void);

#endif

Header2 实现

#include "Header2"
#include "Header1"

int Bar(void){
return g_myStruct.x;
}

每个文件都可以正常编译。只有当我尝试链接它们时,我才会收到以下错误:

Multiple strong definitions  . . . . . . . . . :   2
Symbol Type Library Object Bound Identifier
*MODULE MYLIB 1 *YES g_myStruct
*MODULE MYLIB I2 *YES g_myStruct

在我的全局结构声明前面使用 extern 关键字,我得到这个错误:

Unresolved references  . . . . . . . . . . . . :   2
Symbol Type Library Object Bound Identifier
*MODULE MYLIB I1 *YES g_myStruct
*MODULE MYLIB I2 *YES g_myStruct

最佳答案

您将文件 header1.h 包含在几个不同的源文件中。

这导致了 g_myStruct 的多个不同实例,因此进行了多次重定义。

在文件header1.h 中声明此变量extern,并在一个 源文件中实例化它。


例如:

文件header1.h:

extern struct MyStruct g_myStruct; /* My global struct variable. */

文件header1.c:

struct MyStruct g_myStruct; /* My global struct variable. */

关于c - as400 ILE C 全局变量多重重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39421487/

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