您現在的位置是:首頁 > 武術

嵌入式C個人面試踩坑之資料型別

  • 由 大土豆Pot 發表于 武術
  • 2022-03-02
簡介值得注意的點:在實際的嵌入式開發中,要注意不同平臺之間的差異,如ARM編譯器預設char的屬性為無符號型別,如做以下操作時,在不同平臺會出現不同的結果

重寫返回值型別可以不同嗎

與java,python等崗位不同,嵌入式C崗位的相關面試經驗和材料較為缺乏,難以成系統。本人透過總結學習,工作及面試中遇到的容易的踩坑點,匯成筆記與大家分享,如果大家興趣度較高,將陸續更新。個人能力有限,希望錯誤之處大家能夠踴躍指出,來提升彼此的能力。

一、資料型別

1、資料型別

與其他計算機語言不同,C語言簡單資料型別的位長並沒有嚴格的規定,ANSI(美國國家標準學會) C 只對整型資料進行了規範,如表1。1所示。

表1。1 ANSI C規定的資料型別最小範圍

型別

有符號類型範圍

無符號類型範圍

位數

char

-127~127

0~255

8

short

-32767~32767

0~65535

16

int

-32767~32767

0~65535

16

long

-2147483647~2147483647

0~4294967295

32

注: int在標準中至少是16位的,然而在32位CPU下通常定義為32位。

所以,在面試中,如果遇到問資料類型範圍或位數大小的問題,一定要說明在某種規範下,或者某種型別MCU情況下的位數。

值得注意的點:

在實際的嵌入式開發中,要注意不同平臺之間的差異,如ARM編譯器預設char的屬性為無符號型別,如做以下操作時,

在不同平臺會出現不同的結果。

char a;

for(a = 0;a < 200; a++)

{

//任務處理

};

在一些平臺可能會出現溢位的情況。

void關鍵字可用於修飾函式返回值型別、函式引數、空指標。

void關鍵字用於修飾函式返回值的意圖在於避免程式設計師因漏寫函式返回值型別,導致返回錯誤結果的問題(有些編譯器不寫返回值型別,預設返回int型)。

使用者函式入口引數,表示函式沒有入口引數(ANSI C中不少關鍵字用於更清楚的表示語法)

生命空指標,空指標不指向任何型別的資料,僅僅表示一個記憶體地址。在需要時可進行強轉其他型別。

2、大小端問題

在不同的處理器和系統中,對資料儲存的資料不同,常用的X86和ARM架構的處理器,通常為小端(little endian)模式,power pc等為大端(big endian)模式

如在0x0000地址上存放32位整型變數0x12345678,兩種順序如表2。2所示

2。2大小端順序表示

地址

0x0000

0x0001

0x0002

0x0003

大端

0x12

0x34

0x56

0x78

小端

0x78

0x56

0x34

0x12

注: 記憶方法,大端資料高位在地址高位,小端相反。此外值得注意的是,大小端的資料儲存最小單位為一個地址長度,不要認為為1bit

Top