靜態(tài)函數(shù)(帶static的),外部文件無法使用該函數(shù)了,同樣的是定義靜態(tài)變量后,外部文件同樣不能使用;在工程中,通常各個(gè)模塊分開完成,這時(shí)候如果確定自己定義的函數(shù)別的文件不會(huì)使用,就可以加上static,以保證不會(huì)被誤用;只能在本文件中使用,無法跨文件。
我們擁有10多年網(wǎng)頁設(shè)計(jì)和網(wǎng)站建設(shè)經(jīng)驗(yàn),從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計(jì)師為您提供的解決方案。為企業(yè)提供做網(wǎng)站、成都網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、手機(jī)網(wǎng)站制作設(shè)計(jì)、H5頁面制作、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計(jì)或者設(shè)計(jì)方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計(jì)服務(wù)并滿足您的需求。
靜態(tài)函數(shù)是函數(shù)的一種,函數(shù)包括靜態(tài)函數(shù)和非靜態(tài)函數(shù)兩種。
其中靜態(tài)函數(shù)是有static修飾的函數(shù),如果沒有,則為非靜態(tài)函數(shù)(全局函數(shù))。
靜態(tài)函數(shù)(帶static的),只能在本文件中使用,無法跨文件。而非靜態(tài)函數(shù)(不帶static的),可以在任何一個(gè)文件中使用。當(dāng)在其它文件中使用時(shí),需要做函數(shù)聲明后再使用。
樓上只說對一半,這里能調(diào)用a和b兩個(gè)函數(shù)確實(shí)是因?yàn)槭褂胕nclude把a(bǔ).cpp和b.cpp加入到了main.cpp里面,使用include實(shí)際是把對應(yīng)代碼加到include的位置。真正做項(xiàng)目沒有這樣做的,都是使用頭文件的方式;
static修飾的函數(shù)和變量在別的文件是絕對不可見的,這是樓上錯(cuò)誤的地方,即使使用extern聲明函數(shù)導(dǎo)出,也不可以,編譯時(shí)根本就不能通過,會(huì)報(bào)static類型錯(cuò)誤,不能導(dǎo)出。。。
在你原來文件結(jié)構(gòu)上加入頭文件:
//a.h
#include iostream
using namespace std;
void a();
//b.h
void b();
然后把main.cpp里面的2個(gè)include分別改成a.h和b.h,編譯:g++ main.cpp a.cpp b.cpp會(huì)發(fā)現(xiàn)報(bào)錯(cuò)誤:
a.cpp: In function ‘void a()’:
a.cpp:3: error: ‘void a()’ was declared ‘extern’ and later ‘static’
a.h:3: error: previous declaration of ‘void a()’
這里就是因?yàn)閍函數(shù)是static類型,不能導(dǎo)出,把static去掉這里就可以編譯通過了。。。。
這也是static其中一個(gè)用法
static在c語言中是私有、靜態(tài)意思。
用于在函數(shù)中聲明“靜態(tài)變量”用,在每一次調(diào)用后,該變量并不在函數(shù)返回時(shí)立即釋放,變量中保存的值,可以保留到下一次調(diào)用時(shí)繼續(xù)有效。
私有就是隱藏。static函數(shù)只能聲明后的本文中調(diào)用。static全局變量只能聲明后的本文中調(diào)用。static局部變量只能聲明后的本函數(shù)調(diào)用
靜態(tài)就是一直存在,相對于每次調(diào)用動(dòng)態(tài)分配而言。static函數(shù)未驗(yàn)證是否每次調(diào)用代碼地址都是一致的。static全局變量生命周期到程序或進(jìn)程結(jié)束。static局部變量生命周期到程序或進(jìn)程結(jié)束。
static的使用和作用
靜態(tài)全局變量。全局變量前加static,修飾全局變量為靜態(tài)全局變量,改變?nèi)肿兞康目梢娦?。靜態(tài)局部變量。局部變量前加static,修飾局部變量為靜態(tài)局部變量,改變局部變量的銷毀時(shí)期。靜態(tài)函數(shù)。函數(shù)返回類型前加static,修飾函數(shù)為靜態(tài)函數(shù),改變函數(shù)的可見性。
類的靜態(tài)成員。類成員前加static,修飾類的成員為類的靜態(tài)成員,實(shí)現(xiàn)多個(gè)對象之間的數(shù)據(jù)共享,并且使用靜態(tài)成員不會(huì)破壞封裝性,也保證了安全性。類的靜態(tài)函數(shù),類函數(shù)前加static,修飾類的函數(shù)為靜態(tài)函數(shù),減少資源消耗,不需要實(shí)例化就可以使用。