4

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 のみに対する回答を探しています。

4

4 に答える 4

5

1)

staticは、オブジェクトをグローバルシンボルテーブルに配置しないことを意味します。プラス面として、問題なく複数定義されたシンボルを持つことができます。欠点は、静的変数/メソッドに対してシンボルが生成されないため、デバッグが困難になる可能性があることです。

2&3)

ヘッダー内:

extern const int xyz;

ヘッダーを含むソースファイル(理想的には、名前が.hと一致する同じ.cc):

const int xyz = 123;

このようにして、誰もがxyzについて知っていますが、それは1つのソースファイルでのみ定義されています。

于 2012-10-05T16:36:48.363 に答える
3

ヘッダーファイルでconst変数を宣言できますが、値を指定して定義でき、このヘッダーが含まれているファイルに値を割り当てることもできないため、事実上役に立ちません。

外部にリンクされたシンボルが必要な場合は、ヘッダーファイルで宣言してから、ソースファイルの1つで定義することができます。どちらかを選択できます。

ただし、const int通常、外部リンクを使用しても意味がありません。static const int xyz = 123;ヘッダーで内部リンクを指定するだけです。

これはCの場合です。C++では、constグローバルにはデフォルトで内部リンケージがあります。

于 2012-10-05T17:25:21.400 に答える
1

(OP:あなたはいくつかの質問をしたので、部分的な答えを得ています)

これに答えるには

ヘッダーファイルでconstを定義し、ヘッダーをインクルードすることで複数のファイルでconstにアクセスする方法はありますか?

変数の宣言(値を含む)をconstヘッダーファイルに入れることができます。

extern const int xyz = 123; // note: extern

次に、定義を1つのソースファイルに入れます。

const int xyz; // note: no value provided

これはCでは機能せず、C ++でのみ機能します(つまり、Cでは機能しないと思います。チェックはしていません)。

于 2012-10-05T17:35:06.613 に答える
0

1)static:関数または変数をローカルとして宣言するために使用されます。それらは、定義されたファイルでのみ使用されます。ヘッダーファイルで定義されているため、このファイルを含むファイルで使用される場合

externは、外部変数または関数をインポートするために使用されます。変数または関数は他のファイルで定義する必要があり、静的で定義しないでください

2)constを定義する代わりに、const int X = 5マクロを使用して別のソリューションを使用できます。#define X 5

于 2012-10-05T16:38:13.603 に答える