作者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