1

Below are two files which I will use as my example. If I define an array of structures in file1.h and have file2.c include file1.h I would get a multiple definition error. Why is that? If I just have struct thread tasks[32] I don't get this error.

file1.h

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

file2.c

#include file1.h
4

3 に答える 3

2

ほとんどの場合、ヘッダーファイルを複数のソースファイルにインクルードしています。ディレクティブは文字通りヘッダーファイルの#include内容をソースファイルにインクルードします。つまり、ヘッダーファイルのすべてのコードもソースファイルに含まれます。これは、2つ以上のソースファイルに同じヘッダーファイルが含まれている場合、ヘッダーファイルのコードが複製されることを意味します。

于 2012-07-19T10:34:39.053 に答える
2

= {0}、行を宣言から定義に変換します。ファイルスコープ変数の (互換性のある) 宣言は好きなだけいくつでも持つことができますが、定義は 1 つまでです。複数のソース ファイルにヘッダーを含めると、複数の定義が生成されます。

于 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 に答える