[問題] 可攜程式碼的問題..

看板C_and_CPP (C/C++)作者 (我愛阿蓉)時間13年前 (2013/01/15 12:32), 編輯推噓1(108)
留言9則, 2人參與, 最新討論串1/1
開發平台(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

01/15 12:36, , 1F
先說 size_t , 語意上是給 index 或算 array size 用的,
01/15 12:36, 1F

01/15 12:37, , 2F
其他留給高人指點 (或閒點的時候再回 XD)
01/15 12:37, 2F

01/15 12:39, , 3F
然後你的問題應該是在,x64時 sizeof(pointer)==8, 自然可
01/15 12:39, 3F

01/15 12:39, , 4F
配置記憶體範圍會有所不同 void * malloc(size num); 所
01/15 12:39, 4F

01/15 12:40, , 5F
以自然有種說法,malloc 上限還必須看 size_t 表示範圍.
01/15 12:40, 5F

01/15 12:42, , 6F
最後 x64 sizeof int,long 給多少真的不一定,部份compiler
01/15 12:42, 6F

01/15 12:43, , 7F
還是維持和 x64 一樣,所以才有你說的 intN_t 等出現.
01/15 12:43, 7F

01/15 12:44, , 8F
     ^x86
01/15 12:44, 8F

01/15 15:11, , 9F
上下限直接看limits
01/15 15:11, 9F
文章代碼(AID): #1GzDlwYp (C_and_CPP)
文章代碼(AID): #1GzDlwYp (C_and_CPP)