gcc在64位系统上一个史诗级WARNING
生活随笔
收集整理的這篇文章主要介紹了
gcc在64位系统上一个史诗级WARNING
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如下圖所示,可以看到y的地址在傳入函數并被返回后,高32位被截斷了,于是發生了Segment fault。
首次是在MAC OS X上發現的,本以為是MAX OS X編譯器自己的策略,后來在64位Ubuntu上測試結果一樣。
?
究其原因,我們可以看到“assignment makes pointer from integer without a cast [-Wint-conversion]”,意思就是該函數把默認int轉給地址變量了,然而不幸的是64位系統的地址不是int能裝的下的。
解決問題其實很簡單,只要老老實實把函數聲明寫到頭文件(.h)里,然后在.c文件里include就可以了。
寫頭文件雖然是個規范性的動作,但是很多工程師圖方便,尤其是在嵌入式領域,常常有些官方庫文件都不帶.h。于是導致一些莫名其妙的崩潰,最后自己崩潰了。
特此記錄。
轉載于:https://www.cnblogs.com/ansersion/p/10789635.html
總結
以上是生活随笔為你收集整理的gcc在64位系统上一个史诗级WARNING的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python - 基础算法题1- 使用w
- 下一篇: JAVA反射机制初步理解