看板 C_and_CPP 關於我們 聯絡資訊
( *[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