.o文件中的多个定义错误

时间:2012-04-18 09:16:32

标签: c

我有一个a.h文件,我已经声明了这么多结构。我在a.c文件中初始化这些结构(我已经包含了a.h文件),我想在另一个b.c文件中重用相同的a.h文件。当我在b.c中包含头文件a.h时,我将错误视为多重定义。请帮助我做些什么来防止这个问题并在两个.c文件中重复使用相同的.h文件。

4 个答案:

答案 0 :(得分:6)

你必须永远不要在头文件中实例化事物,即永远不要定义任何东西,只需声明它们。

您应该在C文件的一个中放置每个声明事物的单个定义,并在共享标头中包含extern声明:

mydata.h

struct Foo {
  float baryness;
  float baziness;
};

extern struct Foo TheFoo;

一个 C文件中:

#include "mydata.h"

struct Foo TheFoo;

在项目的其他标题中:

#include "mydata.h"

printf("the baziness is %f right now\n", TheFoo.baziness);

答案 1 :(得分:3)

a.h应该只声明结构而不是变量。或者,如果它确实声明了变量,则应将它们声明为extern以防止重复定义。 (然后在其中一个.c文件中定义它们一次。)

错误是由同一变量的多个定义引起的。请确保a.cb.c都不会声明相同的变量名称。

答案 2 :(得分:0)

http://en.wikipedia.org/wiki/Include_guard

您需要不要包含它两次,即将.h文件包装在等效的

#ifndef _MY_H_
#define _MY_H_

/* codez go here */

#endif _MY_H_

答案 3 :(得分:0)

您的头文件应该像这样声明..

#ifndef MYHEADER_H
#define MYHEADER_H

struct MyStruct {

     ...
     ...

};

#endif // MYHEADER_H

因此,即使您将此文件包含在任意数量的.c文件中,其中的结构也只会被定义一次。