Pergunta

Eu recebo o aviso controlling expression is constant na declaração afirmadora como esta:

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

Por que esse aviso sobre esta afirmação? Como posso suprimir esse aviso?

O NVCC é o compilador NVIDIA CUDA, acho que é baseado no LLVM. Por que ele dá esse aviso, quando os mesmos compilam bem com os compiladores GCC ou Visual C ++?

Foi útil?

Solução

Uma alternativa portátil (possivelmente embrulhada em uma macro) seria algo como:

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

Para esclarecer o que eu quis dizer:

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

... dá por exemplo:

ASSERTION "OUCH && (a && b)" falhou [...

Outras dicas

Eu encontrei esse problema exato e finalmente encontrei uma maneira de desativar os avisos no dispositivo. Aqui estão os detalhes...

Para desativar um aviso específico, você precisa usar a bandeira -xcudafe combinada com um token listado nesta página (http://www.ssl.berkeley.edu/~jimm/grizzly_docs/ssl/opt/intel/cc/9.0/lib/locale/en_us/mcpcom.msg). Por exemplo, para desativar a "expressão controladora é um aviso constante", passe o seguinte ao NVCC:

-Xcudafe "---diag_suppress = boolean_controlling_expr_is_constant"

Isso funcionou para mim! Para outros avisos, consulte o link acima.

Adicione o seguinte em algum lugar próximo ao início do seu código:

#pragma diag_suppress boolean_controlling_expr_is_constant

Observe que isso suprimirá todos os avisos do compilador para "controlar a expressão é constante", não apenas o aviso associado às suas afirmações.

Às vezes, recebo esse aviso ao verificar constantes ou propriedades que são definidas (ou podem ser derivadas) no momento da compilação; portanto, na minha experiência, o aviso foi geralmente benigno e ok de ignorar.

Se for baseado em LLVM, você pode usar algo assim:

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

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

#pragma clang diagnostic pop

A partir de Controlando o diagnóstico via Pragmas.

Tentar #pragma warning.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top