看板 C_and_CPP 關於我們 聯絡資訊
請教一下各位一個static的用法 一般來說,static有三種比較常用的用法 一是在函數內的變數,讓他可以紀錄用途 二是用在不同檔案間,不可共用的變數 三是用在static的data member及member function 那想請教的是第二種的變形 當我有個function放在某個.cpp檔實做時,加上static修飾 那麼他所代表的意義是什麼? 因為我實際測試的結果,其他地方也可以呼叫他 並不是第二種的用法(讓此函數僅在此檔案使用) 所以還請各位指點一下,謝謝 -- ˍˍ 如果我手中有酒,希望與你共飲。 ▕羽人▏ 如果我手上有刀,希望與你一同抗敵。▕非獍▏  ̄ ̄ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.118.1.225
VictorTom:推一下, 小弟最近看別人的code也有同樣的問題@_@" 10/17 19:11
twotwoone:不行,用VC9編譯器,預設Win32主控台專案編成C 10/17 19:20
twotwoone:錯誤1 error LNK2019: 無法解析的外部符號 _bar 在函式 10/17 19:21
twotwoone:加上 static 的函數會變成 internal linkage 無法連結 10/17 19:21
jacobcrab:難道你include了cpp檔? 10/17 19:23
godman362:目前我是將它include進去了 10/17 19:28
godman362:將它拉出來的話,就沒辦法編譯過了 10/17 19:28
godman362:目前的是.h:static void Test(); 10/17 19:29
godman362:.cpp:實做Test() 10/17 19:29
godman362:然後include .h檔進來 10/17 19:29
godman362:不過如果將實做移到.h的話,卻又可以編譯過 10/17 19:32
godman362:請教一下,為什麼會造成這樣的結果? 10/17 19:33
twotwoone:include就只是在該地,展開被include檔內容而已吧 10/17 19:39
twotwoone:實做放.h就等於你把函數寫在同一個檔案,產生同個obj了 10/17 19:40
twotwoone:意思就是這樣做的時候,沒有連結的需要 10/17 19:40
godman362:所以對.h來說,其實只是一個巨集而已是嗎? 10/17 19:41
godman362:我的意思是,.h對main.cpp而言只是個巨集而已是嗎? 10/17 19:41
twotwoone:如果我沒搞錯,那是這樣沒錯 10/17 19:41
godman362:這樣我明白了,謝謝指點 10/17 19:44
QQ29:static 就限制該檔案專有的function 10/17 20:20
QQ29:你把實作寫在.cpp那他就會當成不同檔案 一個是main.cpp 10/17 20:21
QQ29:一個是你另一個cpp寫的實作 但是main.cpp看到的只有.h的宣告 10/17 20:21
QQ29:所以他會說你沒有定義~ 10/17 20:22
legnaleurc:static 修飾 function 代表 internal linkage ... 10/17 21:06
godman362:謝謝兩位,不過想請教一下l大,什麼叫linkage? 10/17 21:49
legnaleurc:function 預設是 external linkage 10/17 22:49
godman362:謝謝l大,我會詳細看一下 10/18 07:24