作者QQ29 (我愛阿蓉)
看板C_and_CPP
標題[問題] 可攜程式碼的問題..
時間Tue Jan 15 12:32:55 2013
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
有點好奇怎麼樣才能寫可攜的程式
但我環境只有vc
以VS 2012 VC來看
x86設定下 我看到size_t的typedef是
#ifdef _WIN64
typedef unsigned __int64 size_t;
#else
typedef _W64 unsigned int size_t;
#endif
_W64這個似乎以下面解釋 , 是一個識別用途
http://msdn.microsoft.com/en-us/library/s04b5w00(v=vs.80).aspx
所以在x64的條件下size_t = unsigned __int64
我覺得很疑惑以MSDN這樣描述和以前常常聽到
int, long, or a pointer.
這些size是會跟著平台變得
我可不可以建立觀念說
int 在 64bit環境下 會變 (變成多少 不肯定 也許是8?)
但我自己照著MSDN建立x64環境
sizeof int = 4, long = 4, pointer = 8
好怪 他並不會跟著變....所以上面的觀念是錯誤的嗎??還是看compiler?
而__int64 這種type好像只有VC自己規範的...
所以要寫可攜的程式碼
我可以說
1. 要用無號整數 請用size_t?? (for VC or GCC)
2. 若有號整數 用intptr_t?? (for VC or GCC)
3. 但是又有一個uintptr_t....他跟size_t有語意上的差異嗎?
4. 為啥上面兩個type都有"ptr"這keyword..跟ptr大小相關的int的意思嗎?
5. int32_t這是固定寬度的typedef..整數 , 若上面大觀念沒錯
int 會變動 只有兩種case "變"跟"不變" 那我們是不是程式碼裡面要馬就用
intN_t 和 intptr_t
根本就不該使用int了?
以上許多地方不太了解
請各位指證
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.163.58.205
推 EdisonX:先說 size_t , 語意上是給 index 或算 array size 用的, 01/15 12:36
→ EdisonX:其他留給高人指點 (或閒點的時候再回 XD) 01/15 12:37
→ EdisonX:然後你的問題應該是在,x64時 sizeof(pointer)==8, 自然可 01/15 12:39
→ EdisonX:配置記憶體範圍會有所不同 void * malloc(size num); 所 01/15 12:39
→ EdisonX:以自然有種說法,malloc 上限還必須看 size_t 表示範圍. 01/15 12:40
→ EdisonX:最後 x64 sizeof int,long 給多少真的不一定,部份compiler 01/15 12:42
→ EdisonX:還是維持和 x64 一樣,所以才有你說的 intN_t 等出現. 01/15 12:43
→ EdisonX: ^x86 01/15 12:44
→ diabloevagto:上下限直接看limits 01/15 15:11