En una prueba, estoy descartando cualquier cosa de stderr
ya que desorienta la salida del caso de prueba. Estoy usando el siguiente código:Casting to void no elimina el error warn_unused_result
freopen("/dev/null", "w", stderr);
Al compilar con -Wall -Werror
, me sale el error
error: ignoring return value of ‘freopen’, declared with attribute warn_unused_result
que se espera. Sin embargo, la solución habitual de fundición a void
no parece funcionar. Es decir, cambiar el código a
(void) freopen("/dev/null", "w", stderr);
sigue produciendo la misma advertencia. No me importa si esta función falla, ya que el peor escenario es un poco de producción adicional. ¿De otra manera puedo arreglar esto?
EDIT: Sé que podría introducir una variable adicional innecesaria. Realmente me gustaría saber por qué no funciona el lanzamiento al vacío.
ACTUALIZACIÓN: yo decidimos ir con esto:
FILE *null = fopen("/dev/null", "w");
if (null) { fclose(stderr); stderr = null; }
Después de leer la documentación freopen
con más cuidado, veo que si la apertura /dev/null
falla, stderr
todavía será destruida. Esto resuelve ese problema.
'nulo' es un mal nombre para una variable C . –
Buen punto. No sé lo que pensé que era una buena idea. –