>>759だけど、自分なりに調べてみた。
まず、CFAQに
C FAQ 1
http://www.kouno.jp/home/c_faq/c1.html#7 >Unixのコンパイラやリンカーは「共通モデル (common model)」を使う、
>これは2回以上初期化されないかぎり複数の定義を許すものである。
>この動作は「共通の拡張(common extension)」としてANSI C規格に出てくる。
共通の拡張(common extension)とは、
J.5 Common extensions
The following extensions are widely used in many systems, but are not portable to all
implementations. The inclusion of any extension that may cause a strictly conforming
program to become invalid renders an implementation nonconforming. Examples of such
extensions are new keywords, extra library functions declared in standard headers, or
predefined macros with names that do not begin with an underscore.
J.5.11 Multiple external definitions
There may be more than one external definition for the identifier of an object, with or
without the explicit use of the keyword extern; if the definitions disagree, or more than
one is initialized, the behavior is undefined (6.9.2).
仮定義をどう解釈するかは置いといて、複数定義に関しては、Unixでは許されており、
C規格においても、common extensionとして多くのシステムが採用しているとされている。