4

我有一个 ah 文件,我在其中声明了这么多结构。我在 ac 文件中初始化这些结构(我已包含 ah 文件),我想在另一个 bc 文件中重用相同的 ah 文件。当我在 bc 中包含头文件 ah 时,我将错误作为多个定义。请帮助我如何防止此问题并在两个 .c 文件中重用相同的 .h 文件。

4

4 回答 4

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);
于 2012-04-18T09:19:34.973 回答
3

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

该错误是由同一变量的多个定义引起的。确保a.c并且b.c不要都声明相同的变量名。

于 2012-04-18T09:20:07.883 回答
0

你的头文件应该这样声明..

#ifndef MYHEADER_H
#define MYHEADER_H

struct MyStruct {

     ...
     ...

};

#endif // MYHEADER_H

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

于 2012-04-18T09:28:52.870 回答
0

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

您不需要包含它两次,即将 .h 文件包装成相当于

#ifndef _MY_H_
#define _MY_H_

/* codez go here */

#endif _MY_H_
于 2012-04-18T09:18:59.140 回答