2016-10-12 7 views
1

以下のコードでは、各スコープのシンボルテーブルを描画しようとしていますが、スコープはグローバル、f1、else、f2です.f2の場合はxがそのシンボルスコープ。また、f1は(5)任意のシンボルテーブルに関連付けられますでしょうか?などシンボルテーブルとスコープ

int x = 3; 
int f1(int x) { 
    if (x > 4) 
     f1(x-1); 
    else { 
     int x = 1; f2(); 
    } 
} 
int f2() { 
    print x; 
} 
f1(5); 

答えて

1

スコーピングと変数宣言に関するいくつかの一般的な仮定での作業。

  1. ない。記号のみですxしか使用していないので、シンボルテーブルに宣言されたときにシンボルテーブルに追加されます。 eを任意のテーブルに追加しました。だから、あなたの質問の並べ替えは理にかなっていません。あなたのコンパイラはシンボルxの使用に遭遇し、シンボルテーブルでそれを調べます。これは、グローバルスコープのxとして検出されます。

  2. f1(5)は実際にシンボルテーブルに関連付けられていません。関数呼び出しを行っているので、それが存在することを確認するためにはf1を検索しなければなりません(また、パラメータ番号と型は一致します)。使用前に既に定義されているので、グローバルスコープのシンボルテーブルにはf1があります(また、そのポイントのコードにはグローバルスコープが1つしかないので、参照するテーブルは1つだけです)。したがってf1(5)は、f1シンボルとパラメータ情報がシンボルテーブルにあるという事実にのみ関連しています。

関連する問題