问答题X 纠错
对于函数f1,局部变量x声明的作用域是整个函数体,导致在函数体中不可能访问形式参数x。由于这是一个合法的C语言函数,因此编译器给出警告错误。
对于函数f2,由于局部变量x的作用域只是函数体的一部分,不会出现上述问题,因而编译器不报错。
你可能喜欢
问答题
Pascal语言中,语句:forv:=initial.to.final.do.stmt与下列代码序列有相同含义:
(a)试考虑下述Pascal程序:
对于initial=MAXINT-5和final= MAXINT,问此程序将做些什么?其中MAXINT为目标机器允许的最大整数。
(b)试构造一个翻译pascal的for语句为三地址代码的语法制导定义。
问答题
下面给出一个C语言程序及其在SPARC/SUN工作站上经某编译器编译后的运行结果。从运行结果看,函数func中4个局部变量i1,j1,f1,e1的地址间隔和它们类型的大小是一致的,而4个形式参数i,j,f,e的地址间隔和它们的类型的大小不一致,试分析不一致的原因。注意,输出的数据是八进制的。
问答题
试问下面的程序将有怎样的输出?分别假定:
(a)传值调用(call-by-value);
(b)引用调用(call-by-reference);
(c)复制恢复(copy-restore);
(d)传名调用(call-by-name)。
A.2;
B.8;
C.7;
D.9。
问答题
为下面文法写一个语法制导的定义,用S的综合属性val给出下面文法中S产生的二进制数的值。例如,输入101.101时,S.val=5.625。(不得修改文法)。
问答题
为下面的算术表达式文法写一个语法制导的翻译方案,它将每个子表达式E的符号(即值大于零还是小于零)记录在属性E.sign中(属性值分别用POS或NEG表示)。你可以假定所有的整数都不为零,这样就不用担心零的符号。
问答题
下面的文法产生的表达式是对整型和实型常数应用算符+形成的。当两个整数相加时,结果仍为整数,否则就是实数。
(a)给出一个语法制导定义以确定每个子表达式的类型。
(b)扩充(a)中的语法制导定义把表达式翻译成前缀形式,并且决定类型。使用一元算符inttoreal把整型值转换成相等的实型值,以使得前缀形式中的+的两个操作对象是同类型的。