主题:几道编译原理题目!急用!
1.有下面Pascal程序段:
1.Program ret(input,output)
2.var f:function(integer):integer
3:function a:function(integer):integer
4.var m:integer
5.function addm(n:integer):integer
6.begin return m+n end;
7.begin m=0;return addm end
8.procedure b(g:function(integer):integer)
9.begin writeln(g(z)) end;
10.begin
11.f:=a;b(f);
12.end
假定非局部名字使用静态作用域,为什么程序在栈式分配情况下不能正确工作?
2.为什么C语言允许函数类型作为函数的返回类型,而Pascal却不允许?
3.下面程序在Sun工作站上运行时陷入死循环,试说明原因,如果将long *p改成short *p,将long k改成short k,loop的循环体执行一次便停止了,试说明原因.
main()
{addr();
loop();}
long *p;
loop()
{long i,j;j=0;
for(i=0;i<10;i++)
{(*p)--;j++;}
}
addr()
{long k;k=0;
p=&k;}
1.Program ret(input,output)
2.var f:function(integer):integer
3:function a:function(integer):integer
4.var m:integer
5.function addm(n:integer):integer
6.begin return m+n end;
7.begin m=0;return addm end
8.procedure b(g:function(integer):integer)
9.begin writeln(g(z)) end;
10.begin
11.f:=a;b(f);
12.end
假定非局部名字使用静态作用域,为什么程序在栈式分配情况下不能正确工作?
2.为什么C语言允许函数类型作为函数的返回类型,而Pascal却不允许?
3.下面程序在Sun工作站上运行时陷入死循环,试说明原因,如果将long *p改成short *p,将long k改成short k,loop的循环体执行一次便停止了,试说明原因.
main()
{addr();
loop();}
long *p;
loop()
{long i,j;j=0;
for(i=0;i<10;i++)
{(*p)--;j++;}
}
addr()
{long k;k=0;
p=&k;}