假设动态范围,下面的C ++程序的输出是什么?

时间:2012-12-04 05:00:02

标签: c++ function dynamic global-variables scoping

假设动态范围,以下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();
}

2 个答案:

答案 0 :(得分:1)

任何符合标准的编译器都会给你错误而不输出任何内容,因为你

#include<iostream.h>

之后使用

cout << ...

没有使用std::using指令进行限定,因为

void main()

修复后,任何符合要求的C ++编译器都会输出

8 
6 
50

答案 1 :(得分: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