Vom online draft n1256, 17.9.1.3 :
EOF
, die zu einem ganzzahligen Konstantenausdruck mit dem Typ int und einem negativen Wert erweitert wird, der von mehreren Funktionen zurückgegeben wird, um end-of-file anzugeben, dh keine Eingabe aus einem Stream mehr;
EOF ist immer negativ, obwohl es nicht immer -1 sein kann.
Für Fragen wie diese, ich ziehe Trennung Fehlerbedingungen von Daten, die durch einen Fehlercode zurückkehrt (SUCCESS
, END_OF_FILE
, READ_ERROR
, etc.) als die Rückgabewert der Funktion, und dann die Daten von Interesse für separate Parameter schreiben, wie
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;
}
Warum müssen Sie sogar EOF von Ihrer eigenen Funktion zurückgeben? Definieren Sie einfach Ihre Funktion als "gibt die Zeilennummer zurück, wo das Wort gefunden wurde, oder -1, wenn das Ende der Eingabe erreicht wurde". Das heißt, viele Quellen (z. B. Code Complete) warnen davor, Rückgabewerte mit Fehlercodes zu mischen. –
Richtig, es ist eine mögliche und vollständig praktikable Alternative. Ich dachte jedoch, EOF wäre expliziter gewesen. – Ree