C語(yǔ)言的關(guān)鍵字有很多,要說(shuō)最不常見(jiàn)的,我覺(jué)得應(yīng)該是auto。 說(shuō)它不常見(jiàn),因?yàn)楹芏鄷r(shí)候,我們都把它給省略了。 比如在函數(shù)內(nèi)部定義變量a,正常人都會(huì)這樣寫:
void function() { int a; }很少有人會(huì)在前面加一個(gè)auto:
void function() { auto int a; }其實(shí)這兩種寫法是等價(jià)的,嚴(yán)謹(jǐn)一點(diǎn),在C語(yǔ)言中是等價(jià)的。 那auto關(guān)鍵字是不是雞肋般的存在? auto聲明的變量我們把它稱作自動(dòng)變量,所謂自動(dòng)變量,就是定義的時(shí)候自動(dòng)分配內(nèi)存,函數(shù)運(yùn)行結(jié)束后內(nèi)存自動(dòng)釋放,所以你完全可以把它理解成局部變量。 它的作用跟static正好相反,static修飾的變量因?yàn)榇娣旁陟o態(tài)數(shù)據(jù)區(qū),所以即使函數(shù)調(diào)用結(jié)束了,變量也不會(huì)被釋放。
void function() { static int num = 0; num++; printf("num = %d ", num); } int main() { int i; for (i = 0; i < 3; i++) { function(); } return 0; }我覺(jué)得auto存在的意義,可能就是跟static靜態(tài)變量、register寄存器變量、extern外部變量區(qū)分開(kāi)。
auto int num = 0; //錯(cuò)誤 int main() { return 0; }第二個(gè),在C語(yǔ)言中,使用auto聲明的變量可以沒(méi)有類型,比如直接來(lái)個(gè)auto a,編譯器會(huì)自動(dòng)把a(bǔ)當(dāng)作整型數(shù)據(jù)。
int main() { auto a; }編譯結(jié)果:
root@Turbo:test# gcc test.c -o test test.c: In function ‘main’: test.c:5:7: warning: type defaults to ‘int’ in declaration of ‘a(chǎn)’ [-Wimpli cit-int] 5 | auto a; | ^ root@Turbo:test#第三個(gè),在C++中,auto是一個(gè)類型說(shuō)明符,編譯器可以通過(guò)初始化的結(jié)果來(lái)判斷變量的類型,前提是變量一定得初始化,否則就會(huì)報(bào)錯(cuò)。
int main() { autoa=1.1;//編譯器判斷a的類型為double return 0; }
-
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7634瀏覽量
143917 -
變量
+關(guān)注
關(guān)注
0文章
615瀏覽量
29282
原文標(biāo)題:C語(yǔ)言最雞肋的關(guān)鍵字
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
阿里巴巴開(kāi)放平臺(tái)關(guān)鍵字搜索商品接口實(shí)戰(zhàn)詳解:OAuth2.0 認(rèn)證落地 + 檢索效率優(yōu)化(附避坑代碼)
阿里巴巴國(guó)際站關(guān)鍵字搜索 API 實(shí)戰(zhàn):從多條件篩選到商品列表高效獲客

micro 關(guān)鍵字搜索全覆蓋商品,并通過(guò) API 接口提供實(shí)時(shí)數(shù)據(jù)
《ESP32S3 Arduino開(kāi)發(fā)指南》第三章 C/C++語(yǔ)言基礎(chǔ)
深入理解C語(yǔ)言:C語(yǔ)言循環(huán)控制

static在單片機(jī)中的妙用
單片機(jī)編程關(guān)鍵字之volatile
帶你在單片機(jī)編程中熟練使用const(可下載)
大語(yǔ)言模型的解碼策略與關(guān)鍵優(yōu)化總結(jié)

EE-62:在C語(yǔ)言中訪問(wèn)短字內(nèi)存

評(píng)論