CUDA:NVCC给出控制表达式是断言的持续警告

时间:2009-11-11 02:55:27

标签: c++ compiler-construction warnings nvcc

我在assert语句中得到警告controlling expression is constant,如下所示:

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

为什么对此断言发出此警告?我怎么能抑制这个警告?

NVCC是NVIDIA cuda编译器,我认为它基于LLVM。当GCC或Visual C ++编译器编译好时,为什么会发出此警告?

5 个答案:

答案 0 :(得分: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)”失败[...]

答案 1 :(得分:2)

我遇到了这个确切的问题,最后找到了一种方法来禁用设备上的警告。以下是详细信息......

要禁用特定警告,您需要使用-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”

这对我有用!有关其他警告,请参阅上面的链接。

答案 2 :(得分:2)

在代码开头附近添加以下内容:

#pragma diag_suppress boolean_controlling_expr_is_constant

请注意,这将禁止所有编译器警告“控制表达式是常量”,而不仅仅是与断言相关的警告。

在检查编译时定义(或可以派生)的常量或属性时,我有时会收到此警告,因此根据我的经验,警告通常是良性的,可以忽略。

答案 3 :(得分:0)

如果是基于LLVM的,那么您可以使用以下内容:

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

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

#pragma clang diagnostic pop

来自Controlling Diagnostics via Pragmas

答案 4 :(得分:0)

尝试#pragma warning