今天在復習C語言的時候踩了一個很有意思的坑。
#include <stdio.h> int main() { printf("long int : %d\n", sizeof(long)); return 0; }
上面是我在IDE中使用的測試代碼,執(zhí)行它我的第一反應是會得到 4 的長度。
但實際的結果如下圖所示:
是的,沒看錯,long的長度是8個字節(jié)。我所認識到的長整型long不應該是4個字節(jié)嗎。
那會不會與編譯器的有關?
隨機我用mingw32也跑了一次,結果依舊是8。于是我更換了msvc32和64分別執(zhí)行,跑下來的結果仍然是8個長度。
既然和系統(tǒng)位數(shù),mingw,msvc都沒有關系,那就是系統(tǒng)環(huán)境了。(由于我沒有裝WLS2)所以沒有立馬發(fā)現(xiàn)問題。
當前我使用的系統(tǒng)是MacOS,于是我在windows Pc上繼續(xù)執(zhí)行了上面的程序。結果對比如下。(使用的都是CLion,MinGW64)
windows64環(huán)境下:
MacOS64環(huán)境下:
根據(jù)上面的對比可以發(fā)現(xiàn),在MacOS環(huán)境下,long的長度位8個字節(jié),要比windows多出四個字節(jié)。
長整型long在不用的操作系統(tǒng)中所占用的字節(jié)數(shù)如下圖:
long在linux64環(huán)境下所占用字節(jié)位8,也就間接說明了long在macOS下的字節(jié)長度也是8。(這是因為MacOS系統(tǒng)和Linux都是類Unix系統(tǒng),只不過基于不同的內核)
所以,在寫跨平臺的應用時,如果使用到long型,需要考慮到精度丟失的問題,在寫跨平臺應用時也盡量避免使用long型。
參考文章:
long 在不同操作系統(tǒng)下所占用的字節(jié)數(shù)
到此這篇關于C語言中的long類型是究竟占4個字節(jié)還是8個字節(jié)?的文章就介紹到這了,更多相關C語言long類型字節(jié)內容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/wankcn/article/details/121209323