C でのスコープの正確な意味を理解しようとしていました。私が理解できたのは、スコープがコンパイル時のみに制限されているということです。たとえば、他の関数からローカル変数にアクセスする場合。これにより、コンパイル時エラーが発生します。一方、次のプログラムは正常に動作します。これは、C にはフラットなメモリ モデルがあり、実行時に何にでもアクセスできることを意味します。C の本では、スコープは有効期間と変数の可視性に関連付けられていますが、かなり紛らわしいことがわかりました。これらすべての用語は、コンパイル時にのみ意味があると思います。誰かがそれに光を当てることができますか?
#include "stdio.h"
int *ptr;
int func(void)
{
/** abc is a local variable **/
int abc = 132;
ptr = &abc;
return 0;
}
int func1(void)
{
/** although scope of abc is over still I can change the value in the address of abc **/
*ptr = 200;
printf("the value of abc=%d\r\n",*ptr);
}
int main(void)
{
func();
func1();
return 0;
}
結果: abc
=200の値
簡単に言えば、スコープとは何を意味するのでしょうか? 実行時またはコンパイル時に関係がありますか? ご覧のとおり、実行時に何にでもアクセスできます。ただし、ルールに従わないと、コンパイル エラーが発生します。たとえば、別の関数でのローカル変数の参照。コンパイラは、「変数が定義されていません...」というエラーをスローします。
変数について次のように言えますか?
1) Scope attribute comes under compile time.
2) Lifetime attribute comes under run-time.
3) Visibility attribute comes under compile-time