C語(yǔ)言的關(guān)鍵字有很多,要說(shuō)最不常見(jiàn)的,我覺(jué)得應(yīng)該是auto。 說(shuō)它不常見(jiàn),因?yàn)楹芏鄷r(shí)候,我們都把它給省略了。 比如在函數(shù)內(nèi)部定義變量a,正常人都會(huì)這樣寫(xiě):
void function() { int a; }很少有人會(huì)在前面加一個(gè)auto:
void function() { auto int a; }其實(shí)這兩種寫(xiě)法是等價(jià)的,嚴(yán)謹(jǐn)一點(diǎn),在C語(yǔ)言中是等價(jià)的。 那auto關(guān)鍵字是不是雞肋般的存在? auto聲明的變量我們把它稱(chēng)作自動(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)型,比如直接來(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è)類(lèi)型說(shuō)明符,編譯器可以通過(guò)初始化的結(jié)果來(lái)判斷變量的類(lèi)型,前提是變量一定得初始化,否則就會(huì)報(bào)錯(cuò)。
int main() { autoa=1.1;//編譯器判斷a的類(lèi)型為double return 0; }
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141522 -
變量
+關(guān)注
關(guān)注
0文章
614瀏覽量
28936
原文標(biāo)題:C語(yǔ)言最雞肋的關(guān)鍵字
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
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(可下載)
EE-62:在C語(yǔ)言中訪問(wèn)短字內(nèi)存

C語(yǔ)言關(guān)鍵字分別發(fā)生在哪個(gè)階段
C++新手容易犯的十個(gè)編程錯(cuò)誤
C語(yǔ)言與Java語(yǔ)言的對(duì)比
基于ArkTS語(yǔ)言的OpenHarmony APP應(yīng)用開(kāi)發(fā):HelloOpenharmony
使用邊緣AI和Sitara處理器進(jìn)行關(guān)鍵字檢測(cè)

評(píng)論