[問題] invalid suffix '+' on integer constant

看板C_and_CPP (C/C++)作者 (rebirth)時間12年前 (2013/07/16 23:32), 編輯推噓3(3016)
留言19則, 9人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) No. 問題(Question): 如下的程式碼會產生compile error. 餵入的資料(Input): No. 預期的正確結果(Expected Output): No. 錯誤結果(Wrong Output): compile error : invalid suffix '+' on integer constant 程式碼(Code):(請善用置底文網頁, 記得排版) int a = 0x1f+1; //no error int b = 0x1e+1; //error int c = 0x1e + 1; //no error 補充說明(Supplement): 我認為root cause是因為科學記號e的關係. 但在Visual C++的環境下不會有 compile error. 想請問各位強者版友, 這樣的寫法 GCC 對於16進位的precedence處理 和VC++有所不同, VC++先解讀十六進位0x, 但GCC先解讀科學記號e. 這部分C的 precedence rule似乎沒有定義, 請各位強者版友解惑了! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.85.0.129 ※ 編輯: MauriceLM 來自: 219.85.0.129 (07/16 23:33) ※ 編輯: MauriceLM 來自: 219.85.0.129 (07/16 23:33)

07/16 23:36, , 1F
先問一下你副檔名存成 .c 還是 .cpp?
07/16 23:36, 1F

07/16 23:39, , 2F
(呃, 以上這個推文跟你的問題其實沒有關係, 只是好奇XD)
07/16 23:39, 2F

07/16 23:47, , 3F
那如果 0x1d+1 會不會錯 :D
07/16 23:47, 3F

07/16 23:50, , 4F
GCC的istream會有一樣的問題
07/16 23:50, 4F

07/16 23:51, , 5F
不過數字的解讀埋在<locale>下 這部份好像沒有標準?
07/16 23:51, 5F

07/16 23:51, , 6F
關鍵字: pp-number XD
07/16 23:51, 6F

07/16 23:54, , 7F
突然覺得在努力cppgm的人搞不好都知道怎麼了 (?)
07/16 23:54, 7F

07/16 23:56, , 8F
CPPGM要求使用istream處理他XD
07/16 23:56, 8F

07/17 00:00, , 9F
跟用什麼處理沒關係吧 XD
07/17 00:00, 9F

07/17 00:01, , 10F
不過這麼說難道 istream 也是用一樣 pptoken 文法來切的!?
07/17 00:01, 10F

07/17 00:04, , 11F
造成這個結果的是token的切割而不是precedence
07/17 00:04, 11F

07/17 00:05, , 12F
標準中分辨數字的規則比較寬鬆而且會取最大長度
07/17 00:05, 12F

07/17 00:05, , 13F
因此"0x1e+1"在標準上算是「一個」數字
07/17 00:05, 13F

07/17 00:06, , 14F
就算這個結果是錯誤的數字
07/17 00:06, 14F

07/17 00:07, , 15F
所以GCC是正確的錯誤結果
07/17 00:07, 15F

07/17 00:32, , 16F
1. 是.c 2. abcdf 都不會有問題
07/17 00:32, 16F

07/17 08:14, , 17F
07/17 08:14, 17F

07/17 09:01, , 18F
cppgm出來的人真的是master了 XDD
07/17 09:01, 18F

07/18 04:09, , 19F
MOONRAKER:你可以試試看啊
07/18 04:09, 19F
文章代碼(AID): #1HvMT-vz (C_and_CPP)
文章代碼(AID): #1HvMT-vz (C_and_CPP)