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