0

假设动态作用域,以下 C++ 程序的输出将是什么?我有 turboc++ 编译器,其中显示的输出使用静态范围,答案如下:8 6 50 现在,我怀疑假设动态范围的输出将是 207 104 52 -- 或 -- 207 104 50

#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 回答