作者hakman (^____^)
看板C_and_CPP
標題[問題] GPGPU-sim 中 option_parser.cc
時間Sun Oct 22 23:20:19 2017
開發平台(Platform): (Ex: Win10, Linux, ...)
ubuntu 14.04
ubuntu 16.04
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
g++ 4.8.4 (ubuntu 14.04)
g++ 4.8.5 (ubuntu 16.04)
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
建立GPGPU-sim 所用到的函式庫
問題(Question):
一段可能是問題的 code
virtual bool fromString(const string str)
{
stringstream ss(str);
ss.exceptions(stringstream::failbit | stringstream::badbit);
ss << setbase(10);
if (str.size() > 1 && str[0] == '0') {
if (str.size() > 2 && str[1] == 'x') {
ss.ignore(2);
ss << setbase(16);
} else {
ss.ignore(1);
ss << setbase(8);
}
}
try {
ss >> m_variable;
} catch (stringstream::failure &e) {
return false;
}
m_isParsed = true;
return true;
}
在 ubuntu 14.04 (g++ 4.8.4) 系統中 紅色字串是不會丟出錯誤訊息的
但是在新的系統中 ubuntu 16.04 (g++ 4.8.5) 中 紅色字串丟出錯誤訊息
比較了兩個系統中的 failbit 與 badbit 值都是 4 與 1
直接呼叫函式 ss.fail() 與 ss.bad() 都是 false
想要問的問題是
1. 這是因為g++ 改版後,修正的錯誤嗎?
2. 但是直接拿stringstream::failbit 跟呼叫ss.fail() 所出來的結果不同?
一個有錯誤,一個沒有錯誤,是因為我判斷錯地方,還是哪裡沒注意到?
3. 還是說之前的code 就有錯誤,只是到紅色字串才把錯誤丟出來?
我對c++ 不熟,請大家多多見諒
因為給的不是完整的code,如果需要其他資訊也可以繼續補上
或者就給個大概的方向,我再去追看看
餵入的資料(Input):
已在上敘述
預期的正確結果(Expected Output):
已在上敘述
錯誤結果(Wrong Output):
已在上敘述
程式碼(Code):(請善用置底文網頁, 記得排版)
已在上敘述
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.117.172.56
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1508685623.A.600.html
※ 編輯: hakman (140.117.172.56), 10/22/2017 23:28:58
推 LPH66: .exceptions() 是設定什麼時候丟例外的旗標 10/23 00:23
→ LPH66: .fail() 跟 .bad() 則是去查這些狀況是不是已經發生 10/23 00:23
→ LPH66: 前者是事前設定, 後者是事後查詢, 兩者用途不同 10/23 00:24
→ hakman: 感謝,我應該完全搞錯了 Orz 10/23 00:46