拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
まず最初に、あなたの質問に答えるために、ループ内 (つまり中括弧内) で定義された変数は外部では使用できません。コンパイル時に、この変数が定義されていないことが通知されます。 原因: 中括弧の外側で内部定義された変数を使用すると、変数の範囲を超えました。 以下は C/C 中括弧スコープの簡単な紹介です
上記のコード ブロックから、スコープ 0 にはスコープ 1 が直接含まれていると同時に、間接的にスコープ 2、3、4、および 5 が含まれていることがわかります (スコープ 1 で宣言された変数。自体だけでなく、2、3、4、5 でも使用できますが、1 の上位スコープ、つまり関数の外のスコープ 0 では使用できません) スコープ 1。 、スコープ 2、4、および 5 を直接インクルードし、同時にスコープ 3 を間接的にインクルードします (スコープ 2 で宣言された変数は、スコープ 2 と 2 の下位スコープであるスコープ 3 で使用できますが、 0 では使用できません)。 ) 変数の使用は、変数が宣言されているスコープから下方向にのみ拡張でき、逆方向には拡張できず、上位レベルのスコープに拡張することはできません。 言い換えると、現在のスコープまたはサブスコープでのみ使用できます。
次に、C/C の変数宣言について簡単に説明します。 標準 C には、変数の宣言がスコープの先頭になければならないという厳密な仕様があります。 (コードについて質問がある場合は、C と C を混同したか、コンパイラーの標準が厳密ではない可能性があります。厳密な標準とは、通常、Linux または UNIX での C 標準です。) さえ、関数内のすべて 変数宣言は、変数があらゆる場所で宣言および定義されるのを防ぐために、関数の先頭に置くことが人為的に厳密に要求されています。 (これは、先生やマスター、一部の書籍やビデオで説明されている内容とは異なる場合があります。これは、ほとんどのプログラミング言語がこれを必要としなくなり、ルールが混乱しているためです。) 厳密であることを覚えておいてください。標準 C では、変数はスコープ内または関数の先頭で宣言されます。私の個人的な提案は、それらをすべて関数の先頭に置くことです。 メリット
C/C
開発段階では、一般に一部の関数本体が非常に大きくなります (この場合、通常は関数の設計上の問題ですが、必要性が排除されるわけではありません)。このような巨大な関数本体に直面して、宣言は関数の先頭で変数が宣言されていない状態を防ぐことができます。特に goto ステートメントを使用する場合、特定の変数の宣言がスキップされやすくなります。
変数の複数の効果的な使用、つまり、宣言後の複数の初期化と複数の使用を容易にします。
読みやすい..
はループ本体の外でのみ定義できます。z をループ本体の外に公開したくない場合は、2 つのループ本体を {} で囲み、{} 内で z
z
{}
前のループで定義した変数を別のループで使用する方法があるかどうかはわかりません。また、それを使用することはお勧めできません。コードが増えると煩雑になります
次のループで変数 z を使用しますか?
まず、変数の使用についての私の理解を話させてください。 変数は実際にはメモリ内の空間に対応します。マシンの最下位層は、そこにどのような変数名があるのかを知りません。また、一部の変数は単なるメモリ アドレスです。 変数を使用して、値を取得または値を割り当てます。つまり、メモリの読み取りと書き込みを行います
いいえ、ルール違反です
まず最初に、あなたの質問に答えるために、ループ内 (つまり中括弧内) で定義された変数は外部では使用できません。コンパイル時に、この変数が定義されていないことが通知されます。
原因: 中括弧の外側で内部定義された変数を使用すると、変数の範囲を超えました。
以下は C/C 中括弧スコープの簡単な紹介です
キュアブレーススコープ
リーリー上記のコード ブロックから、
スコープ 0 にはスコープ 1 が直接含まれていると同時に、間接的にスコープ 2、3、4、および 5 が含まれていることがわかります (スコープ 1 で宣言された変数。自体だけでなく、2、3、4、5 でも使用できますが、1 の上位スコープ、つまり関数の外のスコープ 0 では使用できません)
スコープ 1。 、スコープ 2、4、および 5 を直接インクルードし、同時にスコープ 3 を間接的にインクルードします (スコープ 2 で宣言された変数は、スコープ 2 と 2 の下位スコープであるスコープ 3 で使用できますが、 0 では使用できません)。 )
変数の使用は、変数が宣言されているスコープから下方向にのみ拡張でき、逆方向には拡張できず、上位レベルのスコープに拡張することはできません。 言い換えると、現在のスコープまたはサブスコープでのみ使用できます。
変数宣言の場所
次に、
C/C
の変数宣言について簡単に説明します。標準 C には、変数の宣言がスコープの先頭になければならないという厳密な仕様があります。 (コードについて質問がある場合は、C と C を混同したか、コンパイラーの標準が厳密ではない可能性があります。厳密な標準とは、通常、Linux または UNIX での C 標準です。)
さえ、関数内のすべて 変数宣言は、変数があらゆる場所で宣言および定義されるのを防ぐために、関数の先頭に置くことが人為的に厳密に要求されています。 (これは、先生やマスター、一部の書籍やビデオで説明されている内容とは異なる場合があります。これは、ほとんどのプログラミング言語がこれを必要としなくなり、ルールが混乱しているためです。) 厳密であることを覚えておいてください。標準 C では、変数はスコープ内または関数の先頭で宣言されます。私の個人的な提案は、それらをすべて関数の先頭に置くことです。
メリット
開発段階では、一般に一部の関数本体が非常に大きくなります (この場合、通常は関数の設計上の問題ですが、必要性が排除されるわけではありません)。このような巨大な関数本体に直面して、宣言は関数の先頭で変数が宣言されていない状態を防ぐことができます。特に goto ステートメントを使用する場合、特定の変数の宣言がスキップされやすくなります。
変数の複数の効果的な使用、つまり、宣言後の複数の初期化と複数の使用を容易にします。
読みやすい..
上記は私のささやかな経験であり、ここで共有したいと思います。間違いがあれば修正してください。書けば書くほど分かってくることもあります。
はループ本体の外でのみ定義できます。
を定義できます。z
をループ本体の外に公開したくない場合は、2 つのループ本体を{}
で囲み、{}
内でz
前のループで定義した変数を別のループで使用する方法があるかどうかはわかりません。また、それを使用することはお勧めできません。
コードが増えると煩雑になります
次のループで変数 z を使用しますか?
まず、変数の使用についての私の理解を話させてください。
リーリー変数は実際にはメモリ内の空間に対応します。マシンの最下位層は、そこにどのような変数名があるのかを知りません。また、一部の変数は単なるメモリ アドレスです。
変数を使用して、値を取得または値を割り当てます。つまり、メモリの読み取りと書き込みを行います
いいえ、ルール違反です