// b.c
char a[] = { 0, 1 };

// a.c
int main()
{
__extern int *a;
__printf("%d\n", a[1]):
__return 0;
}

不勉強でした
上のコードは警告もなしにコンパイルが通りますね
実行すると segmentation fault ですが

リンク時はデータ型はチェックされず、名前だけで参照を解決してるのですかね……

古い仕様で、今さら変更はできないんでしょうね、チェックができたとしても