いくつかの場所で、C構造体を安全に複数回定義できることを読みましたが、構造体を複数定義すると(複数のインクルードを介して)、gccから「構造体の再定義」エラーが発生します。非常に単純化された例は次のようになります。
foo.c:
#include "a.h"
#include "b.h"
int main(int argc, char *argv[]) {
struct bar b;
b.a = 2;
return 0;
}
ああ:
struct bar {
int a;
int b;
};
bh:
#include "a.h"
struct buz {
int x;
int y;
};
実行すると、次のようgcc foo.c
になります。
In file included from b.h:1:0,
from foo.c:2:
a.h:1:8: error: redefinition of ‘struct bar’
a.h:1:8: note: originally defined here
インクルードガードを配置していないことはわかっています。インクルードガードを使用するとコンパイルエラーが修正されますが、それでもこれは機能するはずです。struct bar
また、foo.cで2つの定義を試しましたが、同じエラーメッセージが表示されますか?では、構造体をCで複数回定義できるかどうか。