我收到了我遇到過的最詭異的警告。我有在我做這樣的事情- 內聯函數中的warray-bounds僞造警告g ++ 4.9.2
inline int f(int n)
{
int myarray[maxn];
myarray[n-1] = 1;
}
參數maxn
是在頭文件作爲constexpr
定義的內聯函數。傳遞給f
的參數n
在我的代碼中總是小於或等於maxn
。然而,每當我編譯,我得到警告
warning: array subscript is above array bounds [-Warray-bounds]
在行myarray[n-1] = 1
。
它只是碰巧使用g++4.9
(clang++
不發出任何警告,以及以前的版本g++
),只有當該功能被標記inline
。如果我在函數中使用的測試條件如
if(n > maxn) cerr << "ERROR!"<< endl;
或甚至簡單的顯示語句作爲
cout << n;
警告消失(在if
當然評價爲false
的,所以沒有錯誤消息是顯示,因爲我絕對確信n <= maxn;
)。
有誰知道這是否是g++
問題?你之前遇到過嗎?
好奇,你有沒有提交錯誤報告? – 2014-12-25 03:57:04
@ShafikYaghmour將它儘量減少到最小的情況,我的代碼非常複雜(lambda通過引用一些參數捕獲,加上線程)。我從假期回來後,我希望能做到:) – vsoftco 2014-12-28 16:07:22