c語言靜態函式的問題,不是c 裡的靜態方法

時間 2021-08-31 21:43:57

1樓:匿名使用者

樓上只說一半,可致電a和b是兩個功能確實使用包括新增a.cpp和b.cpp的main.cpp裡面使用包括實際的相應的**的位置。真的做的專案沒有這樣做,並正在使用的標頭檔案,

靜態函式和變數在其他檔案中是完全不可見的,這是錯誤的的地方樓上,即使有出口extern宣告函式不能在編譯的時候沒有通過,將上報的靜態型別錯誤,不能匯出。 。 。在

標頭檔案中加入你的原始檔案結構:

/ /啊

#包括使用名稱空間std;

無效的(??); br / / / bh

無效();

然後改變裡面的兩個main.cpp中包括ah和bh編譯:g+ +的main.cpp的a.cpp b.cpp會發現報告的錯誤:

a.cpp:在函式'無效():

a.cpp:3:錯誤:無效()「被宣佈為」外部「和後來的」靜態「

啊:3:錯誤:()先前的宣告「無效」

這裡是因為一個函式的靜態型別,你不能出口,擺脫靜態這裡可以編譯通過。 。 。 。

這是靜態的使用

2樓:匿名使用者

1、靜態函式是函式的一種,函式包括靜態函式和非靜態函式兩種。

其中靜態函式是有static修飾的函式,如果沒有,則為非靜態函式(全域性函式)。

2、當整個程式只有一個c檔案時,二者沒有區別。

當程式是由多個c檔案組成時,二者的作用域,即可使用的範圍不同。

其中,靜態函式(帶static的),只能在本檔案中使用,無法跨檔案。

而非靜態函式(不帶static的),可以在任何一個檔案中使用。當在其它檔案中使用時,需要做函式宣告後再使用。

3樓:匿名使用者

靜態函式是在記憶體中單獨開闢記憶體,該記憶體區域的資料一直儲存至函式的生命期結束,呼叫時會直接讀取該區域資料,而非靜態函式則是每次動態地開闢記憶體。但是還是建議儘量少用靜態函式。

4樓:匿名使用者

我今天面試的時候遇到了這個問題,面試官回答也是在呼叫時會copy和不copy。但是我還是覺得這是c++裡面的編譯方式。按照我對c的瞭解,記憶體就分了那麼幾個段,也沒有發現在呼叫c函式的時候還copy了**的。

**段就一個段啊。所以我也想知道到底是說嗎情況,有沒有大俠指導一下啊。

5樓:

靜態成員函式只能訪問類的靜態成員。靜態資料成員屬於整個類,被類的所有物件共享。

c++中static函式類外定義的時候為什麼不寫static?

6樓:手機使用者

static用於修飾成員變數或成員函式時,只在宣告時在類的內部宣告即可,例項化或定義的時候不用加static。

7樓:a知識當鋪

static常用的兩個作用,一個是作用域限制,一個是生存期限制。

對函式來說:

作用域限制:被static修飾的函式,只能用於**本身檔案的呼叫。

生存期限制:對函式來說,這條是用來說類的靜態成員函式的。在類物件出生前,類的靜態成員函式就活著了。

如果類外定義函式時在函式名前加了static,因為作用域的限制,就只能在當前cpp裡用,

類本來就是為了給程式裡各種地方用的,與類的本意衝突,限制了類的自由。

所以在類外實現類成員函式時,函式名前加個static修飾符就報錯了。

關於c語言函式型別定義問題,關於C語言函式型別定義問題

超級福醬 這個語句主要是用的c語言的等號算符 c語言裡面等號可以看做一個函式,它的返回值是右值。比如int i,j,x i j 5 這條語句除了賦值以外還有返回值,返回值是5所以可以這麼寫 x i j 5 這裡x就等於5了。所以 語句 if x 0 就可以簡寫為 if i j 5 0 另外,c裡面字...

C語言中的sprint函式問題,C語言中迴圈問題

好程式設計師 sprintf函式原型為 int sprintf char str,const char format,作用是格式化字串,具體功能如下所示 1 將數字變數轉換為字串。2 得到整型變數的16進位制和8進位制字串。3 連線多個字串。舉例如下所示 1 char str 256 2 int d...

c語言自定義函式返回陣列的問題,C語言自定義函式返回一個陣列的問題

雙槍老椰子 方法1 利用全域性變數 分析 全域性變數作為c語言的一個知識點,雖然我們都瞭解它的特點,但在實際教學過程中應用得並不是很多。由於全域性變數的作用域是從定義變數開始直到程式結束,而對於編寫有多個返回值的c語言函式,我們可以考慮把要返回的多個值定義成全域性變數。當函式被呼叫時,全域性變數被更...