不斷警告我得到警告controlling expression is constant
上斷言語句是這樣的:CUDA:NVCC給出控制表達式上斷言
assert(... && "error message");
爲什麼這個斷言此警告?我怎樣才能壓制這個警告?
NVCC是NVIDIA cuda編譯器,我認爲它是基於LLVM的。爲什麼它會在GCC或Visual C++編譯器編譯時出現此警告?
不斷警告我得到警告controlling expression is constant
上斷言語句是這樣的:CUDA:NVCC給出控制表達式上斷言
assert(... && "error message");
爲什麼這個斷言此警告?我怎樣才能壓制這個警告?
NVCC是NVIDIA cuda編譯器,我認爲它是基於LLVM的。爲什麼它會在GCC或Visual C++編譯器編譯時出現此警告?
的便攜式替代(可能是包裹在一個宏)會是這樣的:
{
const bool error_message = true;
assert([...] && error_message);
}
爲了澄清我的意思:
#define myAssert(msg, exp) { const bool msg(true); assert(msg && (exp)); }
// usage:
myAssert(ouch, a && b);
...給出瞭如:
斷言「ouch & &(a & & b)「失敗
如果它是基於LLVM,那麼你可以使用這樣的事情:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"
char b = 'df'; // no warning.
#pragma clang diagnostic pop
嘗試#pragma warning
。
我遇到了這個確切的問題,並最終找到了一種方法來禁用設備上的警告。以下是詳細信息...
要禁用特定的警告,您需要將-Xcudafe標誌與此頁面上列出的令牌結合使用(http://www.ssl.berkeley.edu/~jimm/grizzly_docs/SSL/opt/intel/cc/9.0/lib/locale/en_US/mcpcom.msg)。例如,要禁用「控制表達式是常量」的警告,通過以下對NVCC:
-Xcudafe「--diag_suppress = boolean_controlling_expr_is_constant」
這爲我工作!有關其他警告,請參閱上述鏈接。
添加附近某處你的代碼的開頭如下:
#pragma diag_suppress boolean_controlling_expr_is_constant
注意,這將抑制所有的編譯器警告「控制表達式是常量」,不只是你的斷言相關的警告。
在編譯時檢查定義(或可派生)的常量或屬性時,我有時會得到此警告,因此根據我的經驗,警告一般是良性的,可以忽略。
您也可以使用'#pragma diag_warning boolean_controlling_expr_is_constant'重新開啓警告。但是,這些'pragma'不能在設備代碼中。就CUDA工具包而言,它們也完全沒有文檔,所以如果它們有一天停止運行,我不會感到驚訝。 – Sam 2015-09-24 16:22:51
根據NVCC2.0參考,編譯器應該默認爲linux上的gcc。 – 2009-11-11 03:38:18
而gcc(至少3.4.4和4.3.2)不會給出這樣的警告。也許嘗試通過'#ifdef __GNUC__' /'__GNUG__'驗證編譯器? – 2009-11-11 04:05:59
我什至不能重現警告,我不gcc有任何標誌來壓制這種警告。奇怪的。 – 2009-11-12 00:25:12