c語言基礎(chǔ) 嵌入式筆試題 面經(jīng)
1.預(yù)處理&關(guān)鍵字(22道)
1.1宏定義是在編譯的哪個階段被處理的?
答案:宏定義是在編譯預(yù)處理階段被處理的。
1.2寫一個" 標(biāo)準(zhǔn)"宏 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ù)中的實參和形參都要定義類型,二者的類型要求一致。
1.5內(nèi)聯(lián)函數(shù)的優(yōu)缺點和適用場景是什么?
(1)優(yōu)點:內(nèi)聯(lián)函數(shù)與宏定義一樣會在原地展開,省去了函數(shù)調(diào)用開銷,同時又能做類型檢查。
(2)缺點:它會使程序的代碼量增大,消耗更多內(nèi)存空間。
①并行設(shè)備的硬件寄存器(如:狀態(tài)寄存器)。
②一個中斷服務(wù)子程序中會訪問到的非自動變量。
③多線程應(yīng)用中被幾個線程共享的變量(防止死鎖)。
#嵌入式##嵌入式開發(fā)工程師##c##面經(jīng)##筆試題#