作者arcred (坚持阿伏哥联盟)
站内Programming
标题[问题] 一个基础程式语言问题
时间Fri Mar 11 07:29:40 2011
有个题目看了半天实在想不出答案为什麽是这样...
想请板上大大帮忙解答
int N = 20
int M = 30
procedure foo()
int M = N
int N = 40
bar()
print M,N
procedure bar()
M = 50
问在 dynamic scoping + define-anywhere + whole-block-scope
的情况下, 执行了 foo() 之後会印出什麽东西, 或是哪里会产生错误.
答案是 30, 40 (M=30, N=40)
实在想不透为什麽啊...如果是印foo圈内的M
应该被指定成 M =N =20了 (还是会变成40? 因为是define-anywhere)
就算不是, 执行过 bar() 之後, 全域的 M应该也变成 50了才对呀...
那30到底是怎麽印出来的呢?
付上其他题答案参考
static scoping+declare-before-use+declartion-to-end-of-block-scope: M=20,N=40
static scoping+declare-before-use+whole-block-scope: illegal at "int M=N"
static scoping+declare-anywhere+whole-block-scope: M=40, N=40
谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 208.29.54.91
1F:→ sorkayi:这是 SCJP 考题吼 122.117.2.251 03/11 14:04
2F:→ arcred:SCJP是什麽呢? 我题目来源是修课考古题 204.248.204.29 03/12 23:32
3F:→ jacky810111:这是什麽语言? 140.113.92.52 03/13 01:39
4F:→ kingofsdtw:看不懂+1 ... 219.86.218.101 03/13 01:41
5F:→ yauhh:这是程式语言理论的考试题目,不是特定语言 218.160.212.16 03/13 01:46
6F:→ yauhh:会不会是题目定错了? 看来看去怎麽会跑出30? 218.160.212.16 03/13 01:48
7F:→ arcred:我也觉得很疑惑...orz 208.29.54.91 03/14 02:32
8F:→ arcred:这就是个pseudo code表示程式流程.. 208.29.54.91 03/14 02:35
9F:→ arcred:根据不同scoping跟declaration方式特性有不 208.29.54.91 03/14 02:36
10F:→ arcred:同结果 208.29.54.91 03/14 02:37
11F:推 march20:是哪本课本的? 76.88.39.46 03/14 12:05
12F:→ arcred:Programming Language Pragmatics, M.Scott 68.98.169.112 03/14 13:29
13F:→ arcred:不过题目是老师出的我想 68.98.169.112 03/14 13:29
14F:→ tropical72:以 C 来看的确是 30,40 180.177.76.142 03/14 22:01
15F:→ arcred:楼上可以帮忙解释一下吗? 谢谢! 208.29.54.91 03/14 22:11
16F:→ arcred:而且 C 语言应该是 static scoping 不是吗? 208.29.54.91 03/14 22:15
17F:→ yauhh:用C解释没用.这个是要学什麽叫作scoping,218.160.112.127 03/14 22:36
18F:→ yauhh:什麽叫declaration,什麽叫definition.218.160.112.127 03/14 22:37
19F:→ yauhh:语法是一个,但scoping不同意思就不同.218.160.112.127 03/14 22:37