作者adxis (Acquire higher)
看板C_and_CPP
標題[問題] 比較 sizeof(POD) 與 int
時間Thu May 20 05:26:07 2010
( *[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)
→ tinlans:難道你以為 (int) 這種轉型動作是發生在執行期? 05/20 09:29
推 holymars:sizeof的type是unsigned int... 05/20 11:25
→ holymars:int a=-1;unsigned int b=8; if(a < b)當然不會過啊:( 05/20 11:26
→ tinlans:是 size_t。而 size_t 實際型別是 implement-defined, 05/20 11:36
→ tinlans:但確定必然是 unsigned int 或 unsigned long 其中一者。 05/20 11:36
→ tinlans:為了保持可攜性,在 formatted string 記得用 %zu。 05/20 11:39
推 littleshan:這只要打開 warning 就可以看到 compiler 在不爽了 05/20 11:41
推 VictorTom:推compiler會complain....XD 05/20 11:56
推 xxxx9659:這難道是新手12誡裡面的第8誡 @@ 05/23 07:13