GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum erhalte ich einen widersprüchlichen Typen für Getline-Fehler, wenn ich das Beispiel mit der längsten Zeile in Kapitel 1 von K&R2 kompiliere?

Die widersprüchliche Funktion getline() ist eine GNU/POSIX-Erweiterung.

K&R gibt an, dass sie sich in ihrem Buch speziell mit ANSI C befassen (vgl.), das diese Funktion nicht bietet.

Die Autoren präsentieren den vollständigen Leitfaden zur Programmiersprache ANSI-Standard C.

Um gcc in den "K&R-Kompatibilitätsmodus" zu versetzen, können Sie den ANSI- oder ISO-Modus für die Kompilierung angeben. Diese sollen Erweiterungen deaktivieren, z. B. die Funktion getline() .Dies könnte letztendlich die Notwendigkeit beseitigen, andere von K&R bereitgestellte Beispiele ebenfalls zu bearbeiten.

Zum Beispiel lässt sich Folgendes gut kompilieren:

$ gcc test.c -ansi
$ gcc test.c -std=c89

(Außer, dass sie sich über den impliziten Standardrückgabetyp von main() beschweren mit -Wall .)

Anscheinend funktionieren diese Modi auf einigen Systemen möglicherweise nicht wie hier dargestellt (anscheinend können einige Versionen von Mac OS nicht alle Erweiterungen korrekt deaktivieren). Ich habe dies erfolgreich auf meinem Rechner getestet:

$ gcc --version
gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Das Problem ist, dass getline() ist eine Standardbibliotheksfunktion. (definiert in stdio.h ) Ihre Funktion hat denselben Namen und kollidiert damit.

Die Lösung besteht darin, einfach den Namen zu ändern.


Das liegt daran, dass stdio.h einen getline() haben Funktion.

Eine einfache Sache, um dies zum Laufen zu bringen, wäre also, Ihre Funktion in my_getline() umzubenennen

Beide getline() und getdelim() waren ursprünglich GNU Erweiterungen. Sie wurden in POSIX.1-2008 standardisiert .


Linux
  1. Lassen Sie sich mit sort in der Befehlszeile sortieren

  2. Bash-Tipps für den Alltag an der Kommandozeile

  3. Wann kommt die Fehlermeldung „jobs :Not Found“?

  4. Wie trete ich der nächsten Zeile bei, wenn eine Zeile mit einem Regex für das gesamte Dokument in Vi übereinstimmt?

  5. Warum funktioniert „zip“ in einer For-Schleife, wenn die Datei existiert, aber nicht, wenn sie nicht existiert?

8 Tipps für die Linux-Kommandozeile

4 Markdown-Tools für die Linux-Befehlszeile

Warum den Pantheon-Desktop für Linux Elementary OS verwenden

3 Passwort-Manager für die Linux-Kommandozeile

Wie finde ich die Zeilennummer in Bash, wenn ein Fehler aufgetreten ist?

Fehler in der falschen Befehlszeile erhalten, wenn versucht wird, das 7zip-Archiv unter Linux zu extrahieren