c++ 03 標準 (7.1.1 ストレージ クラス指定子 [dcl.stc]) を読んでいるときに、次のような例がいくつかありますが、連続する各宣言のリンケージがどのように決定されるかわかりません。誰でもここで助けてもらえますか? 前もって感謝します!
static char* f(); // f() has internal linkage
char* f()
{ /* ... */ } // f() still has internal linkage
char* g(); // g() has external linkage
static char* g()
{ /* ... */ } // error: inconsistent linkage
void h();
inline void h(); // external linkage
inline void l();
void l(); // external linkage
inline void m();
extern void m(); // external linkage
static void n();
inline void n(); // internal linkage
static int a; // a has internal linkage
int a; // error: two definitions
static int b; // b has internal linkage
extern int b; // b still has internal linkage
int c; // c has external linkage
static int c; // error: inconsistent linkage
extern int d; // d has external linkage
static int d; // error: inconsistent linkage
UPD:さらに、標準のステートメントをどのように理解できますか?
特定の実体に対する連続した宣言によって暗示される関連性は、一致するものとします。つまり、特定のスコープ内で、同じオブジェクト名または関数名の同じオーバーロードを宣言する各宣言は、同じリンケージを意味するものとします。ただし、オーバーロードされた関数の特定のセット内の各関数は、異なるリンケージを持つことができます。