1

わかりましたので、私はこのコードを持っていますが、それは良いプログラミング手法ではないことを知っています. 私はそれが何と呼ばれているか忘れました。

int main()
{
    int variable; 
    {
        int variable;
    }
}

それはローカル名前空間か何かですか?そのようなことをするための正しい用語を思い出せません。

4

6 に答える 6

8

これ{ ... }は、ネストされたスコープを作成するブロックまたは複合ステートメントです。(それは ではありません。)namespace

外側のスコープの宣言と同じ名前を持つ (したがって非表示の) 内側のスコープの宣言のこの特定のケースは、シャドウイングと呼ばれることがあります。

g++ はこれについて警告できます。マニュアルの引用:

`-Wshadow'
     Warn whenever a local variable or type declaration shadows another
     variable, parameter, type, or class member (in C++), or whenever a
     built-in function is shadowed. Note that in C++, the compiler will
     not warn if a local variable shadows a struct/class/enum, but will
     warn if it shadows an explicit typedef.

(Adam Rosenfield がコメントで指摘しているように、 、、または-Wshadowによって有効化されていません。明示的に有効化する必要があります。)-Wall-Wextra-pedantic

于 2013-09-18T19:26:23.733 に答える
3

あなたが言及しているのは、変数の隠蔽または変数のシャドーイングだと思います。外側のスコープと同じ名前で内側のスコープで変数を宣言することにより、内側のスコープから外側の変数を隠しています。明らかに、より複雑なコードでは、これは混乱を招く可能性があります。

http://en.wikipedia.org/wiki/Variable_shadowing

于 2013-09-18T19:28:31.273 に答える
2

既存の変数をシャドーイングしています。これは良いプログラミング方法ではありません。

興味があるので、Java はそれを禁止しています。

于 2013-09-18T19:27:39.023 に答える
0

これは単に変数のスコープと呼ばれます。c では、同じ変数名の変数を定義できます。

于 2013-09-18T19:38:28.437 に答える
0

私はそれをスコープと呼んでいます。他の方もそう呼んでいると思います。

于 2013-09-18T19:25:29.070 に答える