1

以下是我将用作示例的两个文件。如果我在 file1.h 中定义一个结构数组并让 file2.c 包含 file1.h,我会得到一个多重定义错误。这是为什么?如果我只有 struct thread tasks[32],我不会收到此错误。

文件1.h

...
...
struct thread tasks[32] = {0}; // thread is structure defined above
...
...

文件2.c

#include file1.h
4

3 回答 3

2

您很可能将头文件包含在多个源文件中。该#include指令从字面上将头文件的内容包含到源文件中,这意味着头文件中的所有代码也将在源文件中。这意味着如果两个或多个源文件包含相同的头文件,则头文件中的代码将被复制。

于 2012-07-19T10:34:39.053 回答
2

= {0}行从声明变为定义。您可以拥有任意多个(兼容的)文件范围变量声明,但最多定义一个;通过在多个源文件中包含标头,您将生成多个定义。

于 2012-07-19T10:38:36.193 回答
1

您可以通过像这样将头文件的内容包装在#ifndef 中来防止来自多个包含的问题

/* file1.h */
#ifndef INCLUDE_FILE1
#define INCLUDE_FILE1

/* contents here */

#endif
于 2012-07-19T10:43:33.323 回答