在链接时获得错误“多个定义”的原因是什么?

时间:2009-10-24 22:06:20

标签: c gcc

我不断收到多次定义我的函数的错误。当然我的文件中只有一个文件和一个带有该名称的函数。 gcc哪里可以找到其他定义?

这是一个示例错误消息,但我得到了很多:

  

/tmp/ccerCzAD.o:main.c :(文本+位于0xDB):

     

首先在这里定义

     

/tmp/ccGbaGfJ.o:在函数`at':

     

dlist.c :(。text + 0xe3):`at'

的多重定义

我包含了“stdio.h”和“stdlib.h”。功能“at()”是否已经在其中一个中定义了?

3 个答案:

答案 0 :(得分:2)

也许你在头文件中定义了这个函数,而不是声明它。

int at(void); /* declaration */
int at(void) { return 0; } /* definition */

通常的方法是将声明放在头文件和代码文件中的定义中。

答案 1 :(得分:1)

似乎在文件dlist.c和main.c

中定义了函数

可能是这种情况吗?

文件dlist.h

int at();

file dlist.c

int at(){return 0;}

file main.c

#include "dlist.h"

int at(){return 1;}
int main()
{
       return at();
}

答案 2 :(得分:0)

您可能还想:

#ifndef _DLIST_H
#define _DLIST_H

int at();

#endif

使用#include在多个.c文件中包含相同的标头时,可以防止出现同样的错误。