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 here

    Danke 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.h in Zeile 671 nach 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ßschreiben

    vs.
    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? 🙄


Anmelden zum Antworten