我有一个a.h文件,我已经声明了这么多结构。我在a.c文件中初始化这些结构(我已经包含了a.h文件),我想在另一个b.c文件中重用相同的a.h文件。当我在b.c中包含头文件a.h时,我将错误视为多重定义。请帮助我做些什么来防止这个问题并在两个.c文件中重复使用相同的.h文件。
答案 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.c
和b.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文件中,其中的结构也只会被定义一次。