c++ - 使用C编译器,如何设置使得int字长与系统字长相同
迷茫
迷茫 2017-04-17 11:52:17
0
6
994

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

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(6)
迷茫

在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
Ty80

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

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

伊谢尔伦

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

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

左手右手慢动作

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

__int64 j;

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

刘奇

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

伊谢尔伦
#include <stdint.h>

裡面有intptr_t

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板