[199] Re:C言語ポインタ完全制覇についての質問
投稿者:774RR
2007/02/20 02:13:25
>>・どこかで定義されている関数を使う場合、プロトタイプ宣言を行うが、
>> これにはexternをつけても付けなくても良い(で、たぶん普通はつけない)
つけてもつけなくても良い、というか単純に省略時解釈なだけですね。
int hoge(void); という関数宣言は extern int hoge(void); と解釈されます。
void piyo(void) {} という関数定義は extern void piyo(void) {} と解釈されます。
extern がついているので外部結合となるわけです。
あと C と C++ では規則が少し変更されていて
--a.cpp--
int g;
--b.cpp--
int g;
とするとエラーになります (One Definition Rule : ISO/IEC 14882:1998 3.2)
C の場合 ODR の規定がありません。
そのため、過去のコンパイラ用に書かれたコードとの互換性のために、
「複数個の翻訳単位で同一名称の変数が定義されたら、それを同一の実体とみなす」
処理系がほとんどです。
# そーいうコードが多く残っているので。