目标文件的多重定义
Multiple definition of object file
我有两个 *.c
文件。 fileA.c
和 fileB.c
我在两个文件中定义了一个同名的结构,但它们都作为全局变量在每个文件中本地化。
例如:
fileA.c
typedef struct
{
int a;
}MyHandler_t;
MyHandler_t myHandler =
{
.a = 0,
};
fileB.c
typedef struct
{
int a;
}MyHandler_t;
MyHandler_t myHandler;
问题是,如果我尝试在文件 B 的结构中初始化变量 a,我会得到 multiple definition of "myHandler"
。
即使我试图用空括号保留它,我也会得到同样的错误。
为什么会这样?
两个文件都包含主函数中 main.c 中使用的函数,但上面的这些结构是用于状态机控制的局部全局变量。
将 typedef
移动到 .h
头文件。在两个 .C Giles 中都包含头文件。在其中一个 C 文件中创建变量 extern
并删除初始化。整个项目中同一个变量只能fave一次初始化
yuo 也可以同时 meke static 并且它们在编译单元范围内(即文件)将是全局的
C 中没有"local global variable" 这样的东西。myHandler
是一个全局变量,在两个源文件中都有定义。这是无效的,因为每个全局变量只能有一个定义。
如果你想让每个源文件都有自己的file-localmyHandler
变量,你必须声明它static
:
static MyHandler_t myHandler =
{
.a = 0,
};
请注意,这样,其他源文件中的代码就无法通过名称访问该变量。
我有两个 *.c
文件。 fileA.c
和 fileB.c
我在两个文件中定义了一个同名的结构,但它们都作为全局变量在每个文件中本地化。
例如:
fileA.c
typedef struct
{
int a;
}MyHandler_t;
MyHandler_t myHandler =
{
.a = 0,
};
fileB.c
typedef struct
{
int a;
}MyHandler_t;
MyHandler_t myHandler;
问题是,如果我尝试在文件 B 的结构中初始化变量 a,我会得到 multiple definition of "myHandler"
。
即使我试图用空括号保留它,我也会得到同样的错误。
为什么会这样?
两个文件都包含主函数中 main.c 中使用的函数,但上面的这些结构是用于状态机控制的局部全局变量。
将 typedef
移动到 .h
头文件。在两个 .C Giles 中都包含头文件。在其中一个 C 文件中创建变量 extern
并删除初始化。整个项目中同一个变量只能fave一次初始化
yuo 也可以同时 meke static 并且它们在编译单元范围内(即文件)将是全局的
C 中没有"local global variable" 这样的东西。myHandler
是一个全局变量,在两个源文件中都有定义。这是无效的,因为每个全局变量只能有一个定义。
如果你想让每个源文件都有自己的file-localmyHandler
变量,你必须声明它static
:
static MyHandler_t myHandler =
{
.a = 0,
};
请注意,这样,其他源文件中的代码就无法通过名称访问该变量。