c++ - studio - CUDA: NVCC da la expresión de control es advertencia constante en afirmar
nvcc windows (5)
Pruebe la #pragma warning
.
Obtuve la advertencia que controlling expression is constant
en declaración de afirmación como esta:
assert(... && "error message");
¿Por qué esta advertencia en este afirmar? ¿Cómo puedo suprimir esta advertencia?
NVCC es el compilador NVIDIA cuda, creo que está basado en LLVM. ¿Por qué da esta advertencia cuando el mismo compila bien con los compiladores GCC o Visual C ++?
Si está basado en LLVM, entonces puedes usar algo como esto:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"
char b = ''df''; // no warning.
#pragma clang diagnostic pop
Una alternativa portátil (posiblemente envuelta en una macro) sería algo así como:
{
const bool error_message = true;
assert([...] && error_message);
}
Para aclarar lo que quise decir:
#define myAssert(msg, exp) { const bool msg(true); assert(msg && (exp)); }
// usage:
myAssert(ouch, a && b);
... da, por ejemplo:
aserción "ouch && (a && b)" falló [...]
Me encontré con este problema exacto y finalmente encontré una forma de desactivar las advertencias en el dispositivo. Aquí están los detalles...
Para desactivar una advertencia específica, debe usar el indicador -Xcudafe combinado con un token que figura 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 advertencia "la expresión de control es constante", pase lo siguiente a NVCC:
-Xcudafe "--diag_suppress = boolean_controlling_expr_is_constant"
¡Esto funcionó para mí! Para otras advertencias, vea el enlace de arriba.
Agregue lo 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 suprimirá todas las advertencias del compilador para "controlar la expresión es constante", no solo la advertencia asociada con sus afirmaciones.
A veces recibo esta advertencia cuando comprobo constantes o propiedades que están definidas (o que pueden derivarse) en el momento de la compilación, por lo que, en mi experiencia, la advertencia ha sido generalmente benigna y está bien ignorarla.