[問題] 比較 sizeof(POD) 與 int

看板C_and_CPP (C/C++)作者 (Acquire higher)時間16年前 (2010/05/20 05:26), 編輯推噓4(405)
留言9則, 5人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) struct POD { char byte; int i; }; int cnt(0); // ... modify cnt if(cnt < sizeof(POD) ){ // 問題: cnt = -1 的狀況下此條件式不成立 cerr<<"Error!"<<endl; } 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Target: i386-undermydesk-freebsd Configured with: FreeBSD/i386 system compiler Thread model: posix gcc version 4.2.1 20070719 [FreeBSD] 補充說明: 後來加上強制轉型,如下 if(cnt < (int)sizeof(POD) ) 可以達到我的要求,但在傳入型別的狀況下 sizeof 不是應該在編譯期就決定了嗎 用 gdb 執行 "p cnt < sizeof(POD)" 結果也是 true 有沒有人遇過這樣的狀況? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.47.73.218 ※ 編輯: adxis 來自: 114.47.73.218 (05/20 05:27) ※ 編輯: adxis 來自: 114.47.73.218 (05/20 05:29)

05/20 09:29, , 1F
難道你以為 (int) 這種轉型動作是發生在執行期?
05/20 09:29, 1F

05/20 11:25, , 2F
sizeof的type是unsigned int...
05/20 11:25, 2F

05/20 11:26, , 3F
int a=-1;unsigned int b=8; if(a < b)當然不會過啊:(
05/20 11:26, 3F

05/20 11:36, , 4F
是 size_t。而 size_t 實際型別是 implement-defined,
05/20 11:36, 4F

05/20 11:36, , 5F
但確定必然是 unsigned int 或 unsigned long 其中一者。
05/20 11:36, 5F

05/20 11:39, , 6F
為了保持可攜性,在 formatted string 記得用 %zu。
05/20 11:39, 6F

05/20 11:41, , 7F
這只要打開 warning 就可以看到 compiler 在不爽了
05/20 11:41, 7F

05/20 11:56, , 8F
推compiler會complain....XD
05/20 11:56, 8F

05/23 07:13, , 9F
這難道是新手12誡裡面的第8誡 @@
05/23 07:13, 9F
文章代碼(AID): #1Bz5TnA9 (C_and_CPP)
文章代碼(AID): #1Bz5TnA9 (C_and_CPP)