名前がおかしい。

extern int checkStatus(void);
static int status;

int checkStatus() {
  status = !status;
  return status == 0;
}

間違っている点は

  • 宣言と定義の返り値が違う。enum型の大きさがintとは限らない。
  • 宣言と定義の仮引数リストが違う。
  • check〜という名前にも関わらず値を更新している。値を更新するならupdate〜など、変更することを明示した名前にするべき。
  • 値を更新するなら検査値を返すべきではない。Query/Commandの分離が必要。
  • 通例、int型の検査値を用いる場合はエラーコード、つまり正常時に0、を返す。

などなど。