嵌入式面經(jīng) c語言基礎(chǔ)
1.預(yù)處理&關(guān)鍵字(22道)?
1.1宏定義是在編譯的哪個階段被處理的?
答案:宏定義是在編譯預(yù)處理階段被處理的。?
解讀:編譯預(yù)處理:頭文件包含、宏替換、條件編譯、去除注釋、添加行號。?
1.2寫一個"標準"宏MIN,這個宏輸入兩個參數(shù)并返回較小的一個。
答案:
#define??MIN(A,?B)??((A)?<=?(B)??(A)?:?(B))
解讀:
(1)注意這個題目要用三重條件操作符,在宏中要小心地把參數(shù)用括號括起來,并且整個宏也要用括號括起來,防止替換時出現(xiàn)錯誤。?
(2)注意若寫"least = MIN(*p++, b);"這句代碼會產(chǎn)生副作用,將*p++代入宏體,指針p會做兩次自增操作。?
1.3已知數(shù)組table,用宏求數(shù)組元素個數(shù)。
答案:
#define??COUNT(table)??(sizeof(table)?/?sizeof(table[0]))
解讀:sizeof(table)得到數(shù)組長度,sizeof(table[0])得到數(shù)組元素長度,兩者相除即可得到數(shù)組元素個數(shù)。?
1.4帶參宏和函數(shù)的區(qū)別?
(1)帶參宏只是在編譯預(yù)處理階段進行簡單的字符替換;而函數(shù)則是在運行時進行調(diào)用和返回。?
(2)宏替換不占運行時間,只占編譯時間;而函數(shù)調(diào)用則占運行時間(分配單元、保留現(xiàn)????? 場、值傳遞、返回)。?
(3)帶參宏在處理時不分配內(nèi)存;而函數(shù)調(diào)用會分配臨時內(nèi)存。?
(4)宏不存在類型問題,宏名無類型,它的參數(shù)也是無類型的;而函數(shù)中的實參和形參都要定義類型,二者的類型要求一致。?
(5)而使用宏定義次數(shù)多時,宏替換后源程序會變長;而函數(shù)調(diào)用不使源程序變長。?
1.5內(nèi)聯(lián)函數(shù)的優(yōu)缺點和適用場景是什么?
(1)優(yōu)點:內(nèi)聯(lián)函數(shù)與宏定義一樣會在原地展開,省去了函數(shù)調(diào)用開銷,同時又能做類型檢查。?
(2)缺點:它會使程序的代碼量增大,消耗更多內(nèi)存空間。?
(3)適用場景:函數(shù)體內(nèi)沒有循環(huán)(執(zhí)行時間短)且代碼簡短(占用內(nèi)存空間?。?。?
1.6關(guān)鍵字volatile的作用是什么?給出三個不同的例子。
(1)作用:告訴編譯器不要去假設(shè)(優(yōu)化)這個變量的值,因為這個變量可能會被意想不到地改變。精確地說就是,優(yōu)化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。?
(2)例子:?
①并行設(shè)備的硬件寄存器(如:狀態(tài)寄存器)。?
②一個中斷服務(wù)子程序中會訪問到的非自動變量。?
③多線程應(yīng)用中被幾個線程共享的變量(防止死鎖)。?
以上內(nèi)容摘自專刊《嵌入式崗位筆試面試真題講解》,該??粌H有真題講解,還有經(jīng)驗分享,不清楚嵌入式該學(xué)什么的同學(xué),想找嵌入式實習/正式工作的同學(xué),都可以來看看:
https://blog.nowcoder.net/zhuanlan/v0ELPM
嵌入式推薦公司:華為、小米?、OPPO、VIVO、榮耀、一加、???? CVTE、?大疆?、insta360影石、????? 美的?、?TCL?、 海信、創(chuàng)維、烽火、比亞迪、吉利、長安、大眾、經(jīng)緯恒潤?、小鵬、??? 圖森未來、?百度?、???? 滴滴、蔚來、理想、 聯(lián)發(fā)科、?紫光展銳?、全志、???? 寒武紀?、晶晨半導(dǎo)體?、匯頂、???? 華為、???? 中興、??? 浪潮?、TP-LINK、訊飛、商湯、???? 海康威視?、浙江大華、360、小馬智行、元戎啟行、深信服、移動、聯(lián)通、電信、曠視 、四維圖新、中芯國際、復(fù)旦微電子、極氪。