C/C++ の入門サイトや入門本でインクルードガードの説明に「構造体/クラスの多重定義を避けるため」とあるが、 main.c と sub.c でインクルードされたらどうしようもなくね?という疑問が残るだろう。
多重定義エラーはコンパイル時に起こるものなので、例えば以下のコードはOK。
なんとなくでコード書いてるからしばらく書かないと簡単な事でも忘れてしまって困った困った。
main.c
#include "header.h"
int main() {}
sub.c
#include "header.h"
header.h
struct structure {};