Pregunta

Me da la advertencia en controlling expression is constant sentencia assert como esto:

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

¿Por qué esta advertencia en esta aserción? ¿Cómo puedo suprimir esta advertencia?

NVCC es el compilador CUDA de NVIDIA, creo que se basa en LLVM. ¿Por qué se da esta advertencia, cuando la misma compila bien con GCC o compiladores de Visual C ++?

¿Fue útil?

Solución

Una alternativa portátil (posiblemente envuelto en una macro) sería algo como:

 {
     const bool error_message = true;
     assert([...] && error_message);
 }

Para aclarar lo que quería decir:

#define myAssert(msg, exp) { const bool msg(true); assert(msg && (exp)); }
// usage:
myAssert(ouch, a && b);

... da por ejemplo:.

  

afirmación "ay && (a && b)" no [...]

Otros consejos

Me encontré con este problema exacto y finalmente encontré una manera de desactivar las advertencias en el dispositivo. Aquí están los detalles ...

Para desactivar una advertencia específica, es necesario utilizar la bandera -Xcudafe combinado con una ficha que aparece en esta página ( http://www.ssl.berkeley.edu/~jimm/grizzly_docs/SSL/opt/intel/cc/9.0 /lib/locale/en_US/mcpcom.msg ). Por ejemplo, para desactivar la alarma "control de la expresión es constante", pase el siguiente para NVCC:

-Xcudafe "--diag_suppress = boolean_controlling_expr_is_constant"

Esto funcionó para mí! Para otras advertencias, consulte el enlace anterior.

Agregue el siguiente en algún lugar cerca del comienzo de su código:

#pragma diag_suppress boolean_controlling_expr_is_constant

Tenga en cuenta que esto va a suprimir todas las advertencias del compilador para el "control de la expresión es constante", no sólo la advertencia asociada con sus afirmaciones.

a veces se produce esta advertencia al comprobar constantes o propiedades que se definen (o pueden derivarse) en tiempo de compilación, por lo que en mi experiencia de la advertencia ha sido generalmente benigna y OK para ignorar.

Si se basa LLVM, entonces se puede usar algo como esto:

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

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

#pragma clang diagnostic pop

Control de Diagnóstico mediante pragmas .

Trate #pragma warning.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top