0

動的スコープを仮定すると、次の C++ プログラムの出力はどうなりますか? 表示されている出力が静的スコープを使用しているturboc ++コンパイラを使用しており、答えは次のとおりです。

#include<iostream.h>
#include<conio.h>
int n=1;
void printn(int x)
{
  cout<<x+n<<"\n";
}
void increment()
{
  n=n+2;
  printn(n);
}
void main()
{
  clrscr();
  int n;
  n=200;
  printn(7);
  n=50;
  increment();
  cout<<n;
  getch();
}
4

2 に答える 2

1

準拠しているコンパイラはエラーを出し、何も出力しません。

#include<iostream.h>

その後、使用します

cout << ...

ディレクティブを使用したり、ディレクティブを使用しstd::たりせずに、using

void main()

これらを修正すると、準拠しているC++コンパイラが出力します。

8 
6 
50
于 2012-12-04T05:04:43.227 に答える
0

PLコースではかなり標準的な質問だと思います。

動的スコープ (およびミュータント C++) を想定

207
104
52

あなたの質問はおそらくスコープを理解するための理論的な演習であるため、テストするのは困難です。ただし、Perl (通常は (そしてありがたいことに) 静的にスコープが設定されています) は、localキーワードを使用して要求した場合、動的スコープをサポートします:

my $x = 1;    # default lexical scope
local $y = 1; # dynamically scoped.

したがって、気が向いたら、Perl でプログラムを書き直して、試してみることができます。

sub println {
  my $x = shift;
  printf "%d\n", $x + $n;
}

sub increment {
  $n = $n + 2;
  println($n);
}

sub main {
  local $n = 200; # $n will be dynamically scoped!
  println(7);
  $n = 50;
  increment();
  print "$n\n";
}

main();

を与えます207 104 52

于 2012-12-04T05:37:19.693 に答える