[問題] 一個基礎程式語言問題
有個題目看了半天實在想不出答案為什麼是這樣...
想請板上大大幫忙解答
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
→
03/11 14:04, , 1F
03/11 14:04, 1F
→
03/12 23:32, , 2F
03/12 23:32, 2F
→
03/13 01:39, , 3F
03/13 01:39, 3F
→
03/13 01:41, , 4F
03/13 01:41, 4F
→
03/13 01:46, , 5F
03/13 01:46, 5F
→
03/13 01:48, , 6F
03/13 01:48, 6F
→
03/14 02:32, , 7F
03/14 02:32, 7F
→
03/14 02:35, , 8F
03/14 02:35, 8F
→
03/14 02:36, , 9F
03/14 02:36, 9F
→
03/14 02:37, , 10F
03/14 02:37, 10F
推
03/14 12:05, , 11F
03/14 12:05, 11F
→
03/14 13:29, , 12F
03/14 13:29, 12F
→
03/14 13:29, , 13F
03/14 13:29, 13F
→
03/14 22:01, , 14F
03/14 22:01, 14F
→
03/14 22:11, , 15F
03/14 22:11, 15F
→
03/14 22:15, , 16F
03/14 22:15, 16F
→
03/14 22:36, , 17F
03/14 22:36, 17F
→
03/14 22:37, , 18F
03/14 22:37, 18F
→
03/14 22:37, , 19F
03/14 22:37, 19F
討論串 (同標題文章)