【踩坑】修改頭文件 stdint.h

個(gè)人博客

所有文章除特別聲明外,均采用 CC BY-NC-SA 4.0 許可協(xié)議。轉(zhuǎn)載請(qǐng)注明來(lái)自 nixgnauhcuy's blog!

如需轉(zhuǎn)載,請(qǐng)標(biāo)明出處!

前言

這里說(shuō)踩坑似乎不合適,應(yīng)該是自己坑自己,不過(guò)還是應(yīng)當(dāng)記錄下來(lái),時(shí)時(shí)刻刻提醒自己!


踩坑描述

不同項(xiàng)目對(duì) int、unsigned int等數(shù)據(jù)類(lèi)型會(huì)使用 typedef 為這些數(shù)據(jù)類(lèi)型定義一個(gè)新的名字,這樣在移植項(xiàng)目的過(guò)程中,如果不想大規(guī)模的改動(dòng)源碼,則需要自己在頭文件中依據(jù)修改的名字自己用 typedef 聲明一下。

我在移植一個(gè)開(kāi)源項(xiàng)目時(shí),這個(gè)項(xiàng)目的數(shù)據(jù)類(lèi)型我自己的工程是沒(méi)有的,所以沒(méi)多想,動(dòng)手就在 Keil 中右鍵跳轉(zhuǎn)到已經(jīng)存在的數(shù)據(jù)類(lèi)型的頭文件,當(dāng)時(shí)沒(méi)注意這個(gè)頭文件的名字是 stdint.h,在聲明完開(kāi)源項(xiàng)目的數(shù)據(jù)類(lèi)型后,編譯也不會(huì)報(bào)錯(cuò)。結(jié)果就是這樣一個(gè)小改動(dòng),自己埋下了深坑??,每次想起都覺(jué)得十分不應(yīng)該!

最關(guān)鍵的 unsigned long long 類(lèi)型居然被我寫(xiě)錯(cuò),寫(xiě)成 __INT64 直接就變成了 long long 類(lèi)型,后面運(yùn)行的時(shí)候總是掛掉,單步調(diào)試的時(shí)候總是在將數(shù)據(jù)轉(zhuǎn)換的時(shí)候掛掉,要么指針跑飛要么棧溢出的,調(diào)了整整快一個(gè)星期,后面還以為是電腦的大小端和 cortexM3 的大小端不一致導(dǎo)致的,調(diào)整了數(shù)據(jù)轉(zhuǎn)換后,雖然不會(huì)運(yùn)行的時(shí)候掛掉,但是總是會(huì)返回出錯(cuò)。

最后還是大佬在旁邊幫我單步調(diào)試發(fā)現(xiàn)的數(shù)據(jù)類(lèi)型聲明的問(wèn)題,被無(wú)情的打臉和嘲諷后,修正了問(wèn)題,最后運(yùn)行的時(shí)候一遍就通過(guò)了。??

這里主要是兩點(diǎn)錯(cuò)誤:

  • 1. 是修改了非本工程的文件,修改了標(biāo)準(zhǔn) C 庫(kù)的文件 stdint.h,這些標(biāo)準(zhǔn) C 庫(kù)的文件可能在很多地方都有用到,一般不能隨意更改的。
  • 2. 是使用 typedef 為數(shù)據(jù)類(lèi)型另起名字的時(shí)候,居然將數(shù)據(jù)類(lèi)型寫(xiě)錯(cuò)了!

解決問(wèn)題

最后 copy 別人電腦下的stdint.h 文件,將自己修改的替換后,在自己工程的數(shù)據(jù)類(lèi)型聲明頭文件中,添加開(kāi)源代碼中的數(shù)據(jù)類(lèi)型后,問(wèn)題解決!這是一個(gè)粗心大意給自己制造的 BUG,付出了血的教訓(xùn),故此記錄下,提醒自己!


擴(kuò)展

【踩坑】notepad++ Hex-Editor


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容