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