Desde el online draft n1256, 17.9.1.3 :
EOF
que se expande a una expresión constante entera, con tipo int y un valor negativo, que devuelve varias funciones para indicar fin de archivo, es decir, no más entrada de una secuencia;
EOF siempre es negativo, aunque puede que no siempre sea -1.
Por cuestiones como ésta, prefiero separar las condiciones de error de datos, devolviendo un código de error (SUCCESS
, END_OF_FILE
, READ_ERROR
, etc.) como valor de retorno de la función, y luego escribir los datos de interés para los parámetros separados, tales como
int getNextWord (FILE *stream, char *buffer, size_t bufferSize, int *lineNumber)
{
if (!fgets(buffer, bufferSize, stream))
{
if (feof(stream)) return END_OF_FILE; else return READ_ERROR;
}
else
{
// figure out the line number
*lineNumber = ...;
}
return SUCCESS;
}
¿Por qué incluso necesita devolver EOF de su propia función? Simplemente defina su función como "devuelve el número de línea donde se encontró la palabra, o -1 si se llegó al final de la entrada". Dicho esto, muchas fuentes (por ejemplo, Código Completo) advierten contra la mezcla de valores devueltos con códigos de falla. –
Correcto, es una alternativa posible y completamente viable. Sin embargo, pensé que EOF habría sido más explícito. – Ree