¿Por qué convertir los valores de retorno no utilizados en anulados?

Resuelto markh44 asked hace 15 años • 10 respuestas
int fn();

void whatever()
{
    (void) fn();
}

¿Hay alguna razón para anular un valor de retorno no utilizado, o tengo razón al pensar que es una completa pérdida de tiempo?

markh44 avatar Mar 27 '09 20:03 markh44
Aceptado

La respuesta de David cubre prácticamente la motivación para esto, mostrar explícitamente a otros "desarrolladores" que usted sabe que esta función regresa pero la está ignorando explícitamente.

Esta es una manera de garantizar que siempre se manejen los códigos de error necesarios.

Creo que para C++ este es probablemente el único lugar en el que prefiero usar conversiones estilo C también, ya que usar la notación de conversión estática completa parece excesivo aquí. Finalmente, si está revisando un estándar de codificación o escribiendo uno, también es una buena idea indicar explícitamente que las llamadas a operadores sobrecargados (que no usan notación de llamadas a funciones) también deberían estar exentas de esto:

class A {};
A operator+(A const &, A const &);

int main () {
  A a;
  a + a;                 // Not a problem
  (void)operator+(a,a);  // Using function call notation - so add the cast.
Richard Corden avatar Mar 27 '2009 13:03 Richard Corden

En el trabajo usamos eso para reconocer que la función tiene un valor de retorno, pero el desarrollador ha afirmado que es seguro ignorarlo. Como etiquetó la pregunta como C++, debería usar static_cast :

static_cast<void>(fn());

En lo que respecta al compilador, convertir el valor de retorno en void tiene poco significado.

David Holm avatar Mar 27 '2009 13:03 David Holm

La verdadera razón para hacer esto se remonta a una herramienta utilizada en código C, llamada lint .

Analiza código buscando posibles problemas y emitiendo advertencias y sugerencias. Si una función devolviera un valor que luego no fue verificado, lintavisaría en caso de que esto fuera accidental. Para silenciar lintesta advertencia, envía la llamada a (void).

Daniel Earwicker avatar Mar 27 '2009 13:03 Daniel Earwicker