C 函数的多个定义,首先在此处定义

C 函数的多个定义,首先在此处定义,c,definition,C,Definition,我正在为一个大学项目开发扫描仪/解析器,遇到了以下错误: stack.c 91:“[stack.c中的所有函数]”的多个定义 stack.c91:首先在这里定义 出于某种原因,我似乎无法理解编译器似乎在告诉我,我已经在同一个地方多次定义了同一个函数 我得到了一些框架代码和一个makefile来开始,因此我完全自己编写的文件(stack.c、stack.h)和其余代码之间肯定存在某种不正确的通信 生成文件: symtab.c: symtab.h: 堆栈h: 堆栈c: 我已经四处走动了一个多小时

我正在为一个大学项目开发扫描仪/解析器,遇到了以下错误:

stack.c 91:“[stack.c中的所有函数]”的多个定义
stack.c91:首先在这里定义

出于某种原因,我似乎无法理解编译器似乎在告诉我,我已经在同一个地方多次定义了同一个函数

我得到了一些框架代码和一个makefile来开始,因此我完全自己编写的文件(stack.c、stack.h)和其余代码之间肯定存在某种不正确的通信

  • 生成文件:
  • symtab.c:
  • symtab.h:
  • 堆栈h:
  • 堆栈c:
我已经四处走动了一个多小时,一直在处理makefile,遇到越来越多的问题。这应该如何设置


stack.c
stack.h
是我编写的用于
symtab.c
symtab.h
的小文件,在
symtab.h
中,您将
包含
源文件
stack.c
。不要这样做,多定义问题应该会消失。

我终于(似乎)找到了工作。作为用户315052,我从.h文件中删除了所有#include,并将它们放在.c文件中。然后我收到symtab.h关于stack.h中定义的类型的错误,所以我在symtab.h中包含了stack.h,现在它似乎可以工作了(或者至少可以编译)。

您是否尝试过在头文件中添加一个保护以避免多个定义?我已将
stack.h
的新版本粘贴为。请尝试使用此版本并共享您的结果?可能重复@Ganest我尝试添加该保护,但仍然得到相同的结果。如果我不包括stack.c,则会得到与在symtab.h和symtab中使用的stack.c和stack.h中定义的类型相关的错误。c@user1743798:不应在头文件中包含源文件。不应在源文件中包含源文件。您可以在头文件中包含头文件,但请确保它们被正确地保护以防止多次包含。我已经按照您的建议编辑了我的文件(总是想知道什么应该包含什么,谢谢),但是我的symtab.h现在抱怨stack.h和stack.c中定义的类型。您不必从头文件中删除#includes。规则1)在所有头文件周围设置防护装置(或者只使用一次#pragma——现在每个人都尊重这一点)。规则2)在每个文件、头文件或源文件中,包括定义该文件使用的类型或其他全局变量的头文件。这是合乎逻辑的,根据软件组合的各种原则,它是有效的,也是正确的方法。