查看完整版本: 關於scope的疑問?
頁: [1]

CodeMonk 發表於 2016-7-3 02:53 PM

關於scope的疑問?

本帖最後由 CodeMonk 於 2016-7-3 02:58 PM 編輯

目前再學習C語言,還有很多不太清楚的地方,像是scope就不太清楚!
目前對於C語言的scope概念的理解是:
辨識符(identifier)可以存在區域,也就是變數或subroutine可以被看到或使用的區域,
不代表他存在的區域,像是static關鍵字就可以做出一個可視區很小,但存在域很大的變數。

做成表格就是
_________________________________________
auto   |只有一個括弧(包含子括弧)
_________________________________________
static  |從開始到結束,但只以一個括弧看的到它
_________________________________________
malloc |自訂
_________________________________________


然後我的問題是:

1:譬如說有3個括弧
//全域
{//區域A
        {//區域B
                {//區域C
                }
        }
}
我要如何做出像是可視區域再C然或全域存在的subroutine,好像不行再subroutine前加static關鍵字(還是我的問題?)?

2:同上圖,有沒有辦法做出存在域在B和C但是可視域只有C的變數或subroutine(想要做一個subroutine它有自己的變數但那一個變數只有它自己裡面的subroutine可以動它)?...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

caoh 發表於 2016-7-3 08:20 PM

你講的存在域比較接近 life time (storage duration)

而可視範圍就是 scope 先把這兩個分清楚,溝通會比較有效率

static 意義很多,可以作用在變數上,使其 life time 延長

也可以作用在全域函數上面變成 internal linkage 等於限制他的 scope 在此編譯單元內
  
  
  

nypor 發表於 2016-10-23 11:15 PM

1. 在區域C, 宣告為static即可.
2. 據個人所知... 沒有辦法.
頁: [1]