Pregunta

Para me encontré con esta línea de código:

fprintf(stdout, "message", fflush(stdout));

Tenga en cuenta que el mensaje no contiene ningún -tag%.

¿Es seguro en Visual C ++? fflush () devuelve 0 en caso de éxito y EOF en caso de fallo. ¿Qué va a fprintf () hacer con este parámetro extra?

La primera vez que pensó que se trataba de un truco extraño para añadir una llamada fflush () sin necesidad de una línea adicional. Pero escrito como éste, el fflush () llamada será ejecutado antes de la llamada fprintf () por lo que no descarga el mensaje que se está imprimiendo en este momento, pero los que esperan a ser lavada, en su caso ... ¿verdad?

¿Fue útil?

Solución

Es seguro. Esto es lo que C (C99 al menos, el párrafo 7.19.6.1) dice al respecto

Si el formato es tiempo agotado argumentos siguen siendo, el exceso de argumentos será evaluado, pero son de otra manera ignorado.

Si el objetivo era evitar una línea, yo prefiero hacerlo

fflush(stdout); fprintf(stdout, "message");

si para nada más que prevenir la persona después de leer ese código a cazarme con un bate.

Otros consejos

fprintf no conoce el número exacto de los parámetros, sólo se intenta cargar un argumento por '%'. Si usted proporciona menos argumentos que '%', que se traduce en un comportamiento indefinido, si se proporciona más argumentos, que son ignorados.

Ad segunda pregunta, sí, esto sólo los mensajes en cola de rubor, el nuevo mensaje no será enrojecida.

Creo que está utilizando fprintf varargs a los parámetros del proceso, por lo que ningún parámetro extra deben ser ignorados (no que se trata de una práctica bien o nada). Y tienes razón en que fflush se llamará antes fprintf, así que esto es una especie de truco sin sentido.

Con banderas de advertencia suficientes activado (como -Wall para GCC) obtendrá una advertencia

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top