MW211 EXIT

devlog
C言語/グローバル変数の定義
2012年07月12日
以下の組み合わせなら、OK。
┌──┬───────────────────────────────────┐
│a.h │int z;                                                                │
├──┼───────────────────────────────────┤
│a.c │#include "a.h";                                                       │
├──┼───────────────────────────────────┤
│b.h │int z;                                                                │
├──┼───────────────────────────────────┤
│b.c │#include "b.h";                                                       │
└──┴───────────────────────────────────┘

以下の組み合わせだと、二重定義でNG。
┌──┬───────────────────────────────────┐
│a.h │int z;                                                                │
├──┼───────────────────────────────────┤
│a.c │#include "a.h";                                                       │
│    │#include "b.h";                                                       │
├──┼───────────────────────────────────┤
│b.h │int z;                                                                │
└──┴───────────────────────────────────┘

以下も、二重定義でNG。
┌──┬───────────────────────────────────┐
│a.h │int z;                                                                │
├──┼───────────────────────────────────┤
│a.c │#include "a.h";                                                       │
│    │#include "b.h";                                                       │
├──┼───────────────────────────────────┤
│b.h │#include "a.h";                                                       │
└──┴───────────────────────────────────┘

以下ならOK。
┌──┬───────────────────────────────────┐
│a.h │int z;                                                                │
├──┼───────────────────────────────────┤
│a.c │#include "a.h";                                                       │
│    │#include "b.h";                                                       │
├──┼───────────────────────────────────┤
│b.h │extern int z;                                                         │
└──┴───────────────────────────────────┘

以下だと、実体がなくなってしまうのでNG。
┌──┬───────────────────────────────────┐
│a.h │extern int z;                                                         │
├──┼───────────────────────────────────┤
│a.c │#include "a.h";                                                       │
│    │#include "b.h";                                                       │
├──┼───────────────────────────────────┤
│b.h │#include "a.h";                                                       │
└──┴───────────────────────────────────┘

以下とかもありがちなのか?
┌──┬───────────────────────────────────┐
│a.h │                                                                      │
├──┼───────────────────────────────────┤
│a.c │#include "a.h";                                                       │
│    │int z;                                                                │
├──┼───────────────────────────────────┤
│b.h │extern int z;                                                         │
├──┼───────────────────────────────────┤
│b.c │#include "a.h";                                                       │
│    │#include "b.h";                                                       │
└──┴───────────────────────────────────┘

よくわからん。そのうちちゃんと整理します。(上記はあまり信用しないでね)
分類:C/C++