2011-05-18 9 views

Respuesta

10

Es una forma de codificación a las herramientas de depuración a expensas de los seres humanos para leer el código, y es consideran perjudiciales. En particular, la herramienta clásica lint y quizás algunos compiladores generaron advertencias si no usaba el valor de retorno de una función que devolvía un valor, y la única manera de suprimir esto localmente era emitir el resultado al void.

O ignórelo o arréglelo (elimine los modelos inútiles void) si tiene suficiente autoridad para hacerlo.

+2

Siempre he leído '(nulo)' para decir "Sé que esto arroja un valor, pero he decidido explícitamente que no lo necesito". Por ejemplo, 'alarm()' devuelve el tiempo restante a cualquier alarma configurada previamente que probablemente no le interese realmente. Prefijándolo con '(void)' dice que he considerado que 'alarm()' devuelve un valor, pero no lo quiero. De manera similar, para 'fputs()' pero 'fputs()' puede fallar, por lo que con 'fputs()' estarías diciendo "Voy a ignorar los errores", lo que obviamente es malo. – JeremyP

+1

Por encima de todo, diría que al menos la mitad del tiempo no necesitas los valores de retorno de las funciones de la biblioteca, e ignorarlas no significa ignorar los errores. Por ejemplo, con 'fputs', puede comprobar mucho más fácilmente' ferror' al final de toda la operación de escritura en lugar de comprobar constantemente el valor de retorno de 'fputs', produciendo un código mucho más simple (y por lo tanto, menos probable que contenga errores) No veo ninguna razón por la que deba explicitar el hecho de que no está utilizando el valor de retorno. El simple hecho de que no lo está usando es evidente al leer el código. –

+3

@JeremyP: Lo que R. dice es que generalmente esto es para el beneficio de las herramientas y no para una persona que lee el código. Consulte http://gcc.gnu.org/onlinedocs/gcc/Non_002dbugs.html para obtener una explicación de por qué GCC no hará que sea el valor predeterminado para advertir si se ignoran los valores de devolución: "Advertencia sobre esta práctica solo lleva al programador defensivo a programas de desorden con docenas de moldes para vaciar. Tales moldes se requieren con tanta frecuencia que se convierten en ruido visual. Escribir esos moldes se vuelve tan automático que ya no transmiten información útil acerca de las intenciones del programador ". –

4

La única cosa inusual son los elencos a void. Es una forma de indicar que va a ignorar el valor de retorno de la función, o para indicar que una función no devuelve ningún valor. Algunos compiladores advierten sobre los valores de retorno ignorados, por lo que pueden ser una forma de evitar esa advertencia. No creo que sea un estilo muy bueno.

+0

¿Es un elenco sin embargo? – Bart

+0

¿No es lo mismo si 'void' no está allí? – kern

+1

Sí, es solo un yeso para 'void', y sí, el código tiene exactamente el mismo significado sin el reparto. Algunos compiladores o herramientas pueden emitir una advertencia sin el elenco. –

1

Si se refiere a la parte (void), entonces eso descarta explícitamente el resultado de la llamada a la función. fputs(...) devuelve un int. (void) fputs(...) descarta el valor de retorno int sin generar advertencias del compilador.

Cuestiones relacionadas