搜尋

首頁  >  問答  >  主體

c++ - 使用C编译器,如何设置使得int字长与系统字长相同

比如在处理问题:“如何不使用sizeof()用C程序获得系统字长?”

即便在64位机上,使用过的C编译器也会将int编译为32位。那么如何在C中设置,使得int编译字长和系统字长相同呢?

迷茫迷茫2808 天前1008

全部回覆(6)我來回復

  • 迷茫

    迷茫2017-04-17 11:54:17

    在Linux上用GCC編譯,32位元機的long是4位元組,64位元機的long是8位元組。

    在VS上搜尋了一下巨集INT_MAX的定義,似乎只有一處,是2147483647,所以應該沒有辦法設定了吧,只能自己定義一個型別了。

    而且我了解到通常有些項目都不會直接使用預設類型,而是重新定義一組類型來使用,例如我就可以這樣定義一組類型:

    #ifdef m32
    typedef int SpacelanInt;
    typedef float SpacelanFloat;
    #else
    typedef long int SpacelanInt;
    typedef double SpacelanFloat;
    #endif
    

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 11:54:17

    你不能「設定」int的字長,這玩意兒本來就不是能設定的東西。
    但大多數C的實作裡long的字長等於機器字長,前提是你產生的是“native binary”,例如在64位元系統裡產生64位元的程式。
    另外,pointer/intptr_t/uintptr_t的字長一般也等於機器字長。

    當然,在51之類的單晶片上或16位的古老系統裡完全不是這麼回事

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 11:54:17

    在不同平台(x86, x64等)和不同的編譯器上使用的資料模型是不一樣的, 具體可以參考:
    http://en.wikipedia.org/wiki/64-bit_computing# 64-bit_data_models

    另外想拿到跟機器字長一樣的資料結構的話, 可以用size_t

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 11:54:17

    我用VC 2010也是沒辦法配置產生64位元程式,但別人就有這個選項.不過想想現在這個選項也沒沒什麼意思,大多數人都是32位元系統,就算為了64位那一丁點的性能提升我猜也幾乎是跟32位沒差別

    __int64 j;
    

    http://baike.baidu.com/item/int64

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 11:54:17

    一般編譯器自帶的頭檔有__int32、int32、int32_t之類的typedef,可以確保是32位元的,但如果程式碼跨編譯器就會出問題,還需要自己包裝一下。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 11:54:17

    #include <stdint.h>
    

    裡面有intptr_t

    回覆
    0
  • 取消回覆