gpt4 book ai didi

c - 编译成功后链接器错误

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

我有以下(伪)代码:

文件.h

extern int a;
extern int b;
extern int *c;
// function declarations

file2.c --- 包含 file.h

/*use `a`,`b` and` c` for some operation*/

file3.c --- 包含 file.h

/*use `a`,`b` and `c` for some operation*/

file4.c --- 包含 file.h

/* does not use `a`, `b` or `c`*/

变量声明为 extern 因为相同的变量必须在多个文件中使用。现在所有文件的编译都成功了,但是我收到一个链接器错误,指出 file2 中 abc 的多个定义.cfile4.c 以及 file3.cfile4.c:

Error-
unresolved extern a in file4.c
unresolved extern b in file4.c
unresolved extern c in file4.c
multiple definition of a in file4.c and file2.c
multiple definition of a in file4.c and file3.c
multiple definition of b in file4.c and file2.c
multiple definition of b in file4.c and file3.c
multiple definition of c in file4.c and file2.c
multiple definition of c in file4.c and file3.c

由于我没有在 file4.c 中使用任何变量,而是仅使用在 file.h 中定义的函数声明,

问题:

错误的原因是什么?

最佳答案

可以声明extern [type] [variable-name];任意多次,在任意多个不同的 .h 文件中,甚至在同一个 .h 文件中多次。 (这将毫无意义,但没有什么能阻止你这样做。)

但是,为了即使是单个 extern [type] [variable-name];要在没有链接器错误的情况下工作,您还必须有一个普通的 [type] [variable-name]; (没有 extern )某处。

  • 如果你没有普通的 [type] [variable-name];在某些文件中,您会收到“未解析的外部”链接器错误。

  • 如果你有多个[type] [variable-name];在不同的文件中,您会收到“多重定义”链接器错误。

所以,最有可能发生的是您缺少普通的 int a;当你有多个 int b;int c;某处。这些错误的重复 int bint c可以在不同的 .c 文件中,或者它们甚至可以在单个 .h 文件中,因为每次包含 .h 文件通过 .c 文件,它很重要。

因此,最好的方法是声明 int a;在 file.h 头文件以及您希望使用变量的所有其他文件中 a , 声明为 extern int a; .

通常,最好的方法是声明 extern [type] [variable-name];在所有需要它的 .c 文件包含的 .h 文件中,以及 [type] [variable-name]; 只有一个 .c 文件。

关于c - 编译成功后链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32680391/

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