【问题标题】:How to avoid multiple definition of C variable?如何避免C变量的多重定义?
【发布时间】:2013-11-27 23:05:48
【问题描述】:

我在头文件中声明并在源文件中使用的 C 变量的多个定义出现错误。

在我的头文件中,我有:

//Number of jobs in the job list
extern int numberOfJobs;

在我的源文件中,我在多个函数调用中使用了 numberOfJobs。

我的头文件顶部还有一个预处理指令。

#ifndef _JOBS_GROUP_H_
#define _JOBS_GROUP_H_

并以

结束
#endif

有人可以向我解释为什么会这样吗?我对 C 还很陌生。

【问题讨论】:

  • 你应该在这里发布你的代码来看看发生了什么
  • 如果它是外部的,那么你也应该把代码贴在它实际上声明的地方......
  • @K 你的意思是“定义”。它被声明在就在这里。
  • 你也应该发布错误信息(复制粘贴,不要重复输入或总结)。
  • 您显示的内容看起来是正确的。您应该在一个.c 文件中定义numberOfJobs.h 中的 extern 声明应该在每个引用它的翻译单元中出现一次;包含警卫应该处理这个问题。该定义需要在整个程序中恰好出现一次。如果可能的话,编写一个小程序(可能是 3 个文件,每行几行)来重现问题,并向我们展示您问题中的那些源文件,以及您正在使用的编译器命令和确切的错误消息。

标签: c variables c-preprocessor


【解决方案1】:

我发现为什么我的外部变量出现多个定义错误/未定义的引用错误。

首先导入“jobsgroup.h”,然后我得到的错误有所不同。使用引号导入时出现多个定义错误,但使用 时出现未定义的引用错误。当文件在同一目录中时使用“”,如果文件在包含文件夹中,则使用 。我的头文件位于包含文件夹中,因此在我的情况下使用 更可取。

现在,这个问题的真正解决方案是我认为通过在我的 init 函数中定义我的变量来定义 extern 变量。但是,要定义 extern 变量,您必须在源文件中的函数上方声明它,如下所示:

int numberOfJobs;

这解决了我所有的错误。谢谢你们帮助我。

【讨论】:

    猜你喜欢
    • 2020-10-27
    • 1970-01-01
    • 2015-07-27
    • 2023-03-06
    • 2017-01-19
    • 2011-03-24
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    相关资源
    最近更新 更多