Conflicting Types trotz Prototyp
-
Habe folgenden Code aus einem Buch 1:1 übernommen. Der Prototyp der getline(...) Methode ist auch vorhanden.
Bekomme trotzdem beim compilieren diese Ausgabe :getlineC.c:10:5: error: conflicting types for ‘getline’
/usr/include/stdio.h:671:20: note: previous declaration of ‘getline’ was here
getlineC.c:39:5: error: conflicting types for ‘getline’
/usr/include/stdio.h:671:20: note: previous declaration of ‘getline’ was hereDanke im Voraus!
#include <stdio.h> #define MAXLINE 1000 /*Maximale Länge einer Eingabezeile */ int len; /* Laenge momentaner Eingabezeile */ int max; /* bisheriges Maximum */ char line [MAXLINE]; /*momentane Eingabezeile */ char longest [MAXLINE]; /*laengste Eingabezeile */ int getline(char line[], int maxline); void copy(char to[], char from[]); int main(){ max = 0; while( (len = getline(line, MAXLINE)) > 0){ if( len > max ){ max = len; copy(longest, line); } if( max > 0 ){ printf("%s",longest); } } return 0; } /* getline: Zeile an s, Lange als Resultat */ int getline(char s[], int lim){ int c,i; for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; i++){ s[i] = c; } if( c == '\n'){ s[i] = c; i++; } s[i]='\0'; return i; } /* copy: 'from' nach 'to' kopieren; 'to' muss gross genug sein */ void copy(char to[], char from[]){ int i; i=0; while ((to[i] = from[i]) != '\0'){ i++; } }
-
Dein selbstdefinierter Prototyp von getline ist nicht kompatibel zum offensichtlich schon in stdio.h deklarierten;
getline ist eine im POSIX Standard spezifizierte Funktion, die dein Compiler offensichtlich auch anbietet und wenn dein stdio.h die schon deklariert, solltest du dies unterlassen. (Zeile einfach weg)
-
Er sollte dann aber die Parameterliste noch anpassen.
Schau doch mal in der Datei
/usr/include/stdio.hin Zeile671nach wie dort der Prototyp aussieht.
-
Hab die Methode umbenannt. Vielen Dank!
-
Und das Makro MAXLINE solltest du durch
const int maxline = 1000;ersetzen.
-
Mit welchem Vorteil?
-
Markovicho schrieb:
Mit welchem Vorteil?
Hm... Mir scheint, du hast noch kein "C++-Moral-Buch" gelesen?

1. Debugging
2. Bessere Fehlermeldungen
3. Du "musst" die Konstante nicht mehr großschreibenvs.
1. Du kannst den Wert der Konstante auch in Präprozessoranweisungen nutzen (für #, ## oder bedingte Kompilierung, was bei MAXSIZE nun wirklich nicht der Fall sein sollte)Soweit klar?
-
wxSkip schrieb:
Hm... Mir scheint, du hast noch kein "C++-Moral-Buch" gelesen?

Wie unmoralisch das im C (C89 und C99) Unterforum vorzuschlagen.
-
DirkB schrieb:
wxSkip schrieb:
Hm... Mir scheint, du hast noch kein "C++-Moral-Buch" gelesen?

Wie unmoralisch das im C (C89 und C99) Unterforum vorzuschlagen.
Ups, das steht bei den Threads leider nicht fett drüber, da habe ich manchmal keinen Überblick.

Es sollte mit ++ oder ohne aber eigentlich in diesem Fall egal sein.
-
Okay von den Argumenten lass ich mich überzeugen.
Habe Objektorientierung über Java gelernt und in C++ werd ich mich nächstes Semester noch "umschulen" müssen.
Danke!
-
Markovicho schrieb:
Okay von den Argumenten lass ich mich überzeugen.
Wow, das hört man selten.

(nicht, dass die Argumente so schlecht wären, aber es gibt genügend Anfänger, die meinen, gute Fehlermeldungen und Debugging nicht zu brauchen)
-
Markovicho schrieb:
Habe Objektorientierung über Java gelernt...
Ach, kann man das?
