[問題] GPGPU-sim 中 option_parser.cc

作者: hakman (^____^)   2017-10-22 23:20:19
開發平台(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):
作者: LPH66 (-6.2598534e+18f)   2017-10-23 00:23:00
.exceptions() 是設定什麼時候丟例外的旗標.fail() 跟 .bad() 則是去查這些狀況是不是已經發生前者是事前設定, 後者是事後查詢, 兩者用途不同
作者: hakman (^____^)   2017-10-23 00:46:00
感謝,我應該完全搞錯了 Orz

Links booklink

Contact Us: admin [ a t ] ucptt.com