包含头文件会导致冲突类型

时间:2013-12-03 14:29:55

标签: c

所以我在头文件中有这个结构,称为h1.h

typedef struct{
    int a;
    int b;
    special_t test;
} randomDataType

所以我包含了包含special_t声明的头文件。两个头文件中的所有函数都没有被命名相同,我也看不到循环依赖如何发挥作用,因为第二个头文件中声明的函数只能通过h1.h

然而,我在其他标题中的所有内容都有'先前声明的 _ _'错误。这是为什么?

1 个答案:

答案 0 :(得分:3)

听起来你的头文件中没有多个包含警戒。除非在很少见的情况下,当你到达它们时你会知道,C头文件应该写成这样:

/* This is h1.h.
   This is its license.

   This is what you will find here. */

#ifndef H1_H__
#define H1_H__

all declarations go here

#endif /* h1.h */

除了评论之外,#ifndef ... #endif块之外不应该有任何内容,您需要选择宏名称以使其不与任何其他标题冲突 - 假设所有 C头文件中都有这个构造,或者非常类似的东西。

编译器只处理其内容一次。许多编译器都认识到这种结构,甚至不会再次打开文件(只要宏仍然被定义)。因此,您可以安全地包含来自其他标头的标头(可能只需要一些声明),而不必担心其他文件的作用。