extern
の使用法を次のように説明する情報源 (書籍、オンライン資料) があります。
extern int i; // declaration - has 'extern'
int i = 1; // definition - specified by the absence of 'extern'
また、次の構文をサポートするソースがあります。
extern int i; // declaration
extern int i = 1; // definition - specified by the equal sign
// Both marked with 'extern'
私の質問は - これはCとC++の区別ですか、それともANSI 以前とANSIの慣行ですか?
さて、より実際的な質問:
2 番目の構文を使用して、グローバル オブジェクト (すべてのコンパイル ユニットから参照可能) を作成します。コンストラクターはパラメーターを取らないため、括弧も等号も必要ありません。
extern MyClass myobject;
では、コンパイラはどのようにして宣言と定義を区別できるのでしょうか?
編集:学校に戻って、私は最初の構文(Borland C)に慣れていました。後で、「extern」なしで定義をコンパイルすることを拒否するコンパイラー (おそらく GCC の古いバージョン) を使用しました。それが私を混乱させた理由です。