1) static、extern、const とはどのようなもので、C と C++ ではその使用方法が異なりますか? (デフォルトリンケージとその他の違い)
2) 複数のファイルにインクルードされる C で使用されるヘッダー ファイルでは、次の宣言と定義が許可されます。
static int testvar = 233;
extern int one;
extern int show();
int abc;
const int xyz; // const int xyz = 123; produces error
const定義は、コンパイル中にエラーを生成します (複数の定義が原因である可能性があります)。ただし、ヘッダー ファイルで const 変数を宣言することはできますが、値を提供するように定義でき、このヘッダーが含まれるファイルに値を割り当てることもできないため、事実上役に立ちません。ヘッダー ファイルで const を定義し、ヘッダーを含めて複数のファイルでアクセスする方法はありますか?
3) このヘッダーをC++の複数のファイルに含めることができるようにするには、どのような変更を行う必要がありますか?
4)次のことを考慮してください
header.h
static int z = 23;
test.c
#include"header.h"
z = 33; //gives error redefinition of z!!!??
void abc()
{
z = 33; //perfectly fine here!!??
}
ヘッダーで定義/宣言された静的変数には、各ファイルに内部リンケージがあり、各ファイルにその変数の個別のコピーがあることを意味します。それでは、関数内で完全にファイルされているのに、関数外でその var に値を代入すると、再定義エラーが発生するのはなぜですか?
編集:4番目の質問を追加しました。これは非常に紛らわしいです。
**PS: 現在、質問 1 と 4 のみに対する回答を探しています。