7

controlling expression is constant次のようなassertステートメントで警告が表示されます。

assert(... && "error message");

このアサートに関するこの警告はなぜですか?この警告を抑制するにはどうすればよいですか?

NVCCはNVIDIAc​​udaコンパイラであり、LLVMに基づいていると思います。同じものがGCCまたはVisualC++コンパイラで正常にコンパイルされるのに、なぜこの警告が表示されるのですか?

4

5 に答える 5

3

ポータブルな代替手段(おそらくマクロにラップされている)は次のようになります。

 {
     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)"が失敗しました[...]

于 2009-11-11T03:09:01.607 に答える
3

コードの先頭近くに次を追加します。

#pragma diag_suppress boolean_controlling_expr_is_constant

これにより、アサーションに関連付けられた警告だけでなく、「式の制御は一定です」に関するすべてのコンパイラ警告が抑制されることに注意してください。

コンパイル時に定義された(または導出できる)定数またはプロパティをチェックするときにこの警告が表示されることがあります。そのため、私の経験では、警告は一般的に無害であり、無視しても問題ありません。

于 2014-05-27T21:02:49.187 に答える
2

私はこの正確な問題に遭遇し、最終的にデバイスの警告を無効にする方法を見つけました。詳細はこちら...

特定の警告を無効にするには、このページ( http://www.ssl.berkeley.edu/~jimm/grizzly_docs/SSL/opt/intel/cc/9.0/)にリストされているトークンと組み合わせて-Xcudafeフラグを使用する必要があります。 lib / locale / en_US / mcpcom.msg)。たとえば、「制御式は一定です」という警告を無効にするには、以下をNVCCに渡します。

-Xcudafe "--diag_suppress = boolean_controlling_expr_is_constant"

これは私のために働いた!その他の警告については、上記のリンクを参照してください。

于 2013-06-13T20:03:39.387 に答える
0

LLVMベースの場合は、次のようなものを使用できます。

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"

char b = 'df'; // no warning.

#pragma clang diagnostic pop

プラグマを介した診断の制御から。

于 2009-11-11T03:07:28.070 に答える
0

試してみてください#pragma warning

于 2009-11-11T03:25:22.603 に答える