Fehler bei meinen ersten C Schritten

Dieses Thema im Forum "Mac OS Entwickler, Programmierer" wurde erstellt von onyx, 08.04.2008.

  1. onyx

    onyx Thread Starter

    Hallo,
    bisher habe ich nur in Java und verschiedenen Skriptsprachen programmiert, muss aber jetzt für einen Kurs in C programmieren. Ich habe mir dazu Xcode installiert, doch habe ich "auf die Schnelle" keine Möglichkeit gefunden, die notwendigen Compiler-Flags anzugeben (dazu gleich mehr).
    Also habe ich meine Installation von Eclipse um CDT erweitert, um dort die Möglichkeit nutzen zu können, entsprechende Programme zu erstellen. Hier habe ich auch sofort die Möglichkeit gefunden, die entsprechenden Compiler-Flags zu setzten, welche wir nutzen sollen: -ansi -pedantic -D_POSIX_SOURCE -Wall -Werror.
    Wenn ich Eclipse nun mittels Druck auf Run anweise, den Quelltext auszuführen, erhalte ich die folgenden Fehlermeldungen:

    Mein Quelltext sieht wie folgt aus:

    Code:
    #include <stdio.h>
    
    /* Die Summe der Zahlen von 1 bis n berechnen und entsprechend ausgeben */
    
    main(){
    	
    	int sum;
    	int n;
    	
    	printf("Bitte geben Sie eine Zahl ein: ");
    	scanf("%d", &n);
    	
    	printf("Die eingegebene Zahl war %d\n", n);
    	
    	int sum_n(int n){
    		if (n > 0){
    			sum += n;
    			--n;
    			sum_n(n);
    		}
    		return sum;
    	}
    	printf("Summe von 1 bis %d: %d\n", n, sum_n(n));
    	
    return 0;
    }
    Drücke ich erneut auf Run, öffnet sich eine Fehlermeldung, die mich darauf hinweist: "Launch failed, no binaries".

    Testweise habe ich den Quelltext mal im Terminal ohne Compiler-Flags aufgerufen und das Programm funktioniert so, wie es soll.

    Wo liegt mein Fehler/meine Fehler und wie kann ich diese beheben?

    Vielen Dank im Voraus.

    Edit:
    Ich habe gerade in Xcode die entsprechenden Optionen gefunden, um die Flags zu setzen: Wenn -Wall gesetzt wird, bricht das Kompilieren ab (mit den o.g. Meldungen), wird dagegen -w gesetzt, läuft alles einwandfrei.
     
  2. mrwho

    mrwho Mitglied

    Beiträge:
    2.536
    Zustimmungen:
    82
    Mitglied seit:
    20.07.2003
    Ich habe mir C zwar nur sehr wenig Erfahrung - Compiler können bei den Flags aber recht pedant sein.

    Laut Google meckert er über die Schleife von sum_n innerhalb von main.

    Allgemein macht dies ein gesetztes --pedantic-errors, nimm mal -pedantic raus beim compile.
     
  3. anegmawad

    anegmawad Mitglied

    Beiträge:
    583
    Zustimmungen:
    68
    Mitglied seit:
    12.04.2007
    Problem:
    main() is teine Funktion
    sum_n() ist eine Funktion.
    sum_n() in wird in main() definiert.
    Du hast also eine Funktionsdefinition in einer Funktionsdefinition. Das erlaubt C nicht.

    Lösung:
    Setze die Funktionsdefinition vor main().

    Nachfrage: Du sollst einen Kurs programmieren, obwohl du selbst C nicht kennst?
     
  4. coacetan

    coacetan Mitglied

    Beiträge:
    33
    Zustimmungen:
    2
    Mitglied seit:
    15.01.2008


    OMG :D

    Das ging vlt mal früher wenn überhaupt :D

    main ist keine Funktion -> Wissen über main Funktion fehlt
    sum_n ist auch keine Funktion -> es wäre eine wenn sie nicht innerhalb von main stehen würden :D -> davor setzen

    Variablen werden nicht initialisiert -> siehe int sum;

    Ich hab deinen code mal genommen und angepasst das es geht, das heisst aber noch lange nicht das er dadruch schöner wird

    Code:
    #include <stdio.h>
    
    /* Die Summe der Zahlen von 1 bis n berechnen und entsprechend ausgeben */
    
    int sum_n(int& sum, int n){
    
    	if (n > 0){
    		sum += n;
    		--n;
    		sum_n(sum, n);
    	}
    	return sum;
    }
    
    int main(){
    	int n = 0;
    	int sum = 0;
    	
    	printf("Bitte geben Sie eine Zahl ein: ");
    	scanf("%d", &n);
    
    	printf("Die eingegebene Zahl war %d\n", n);
    
    	printf("Summe von 1 bis %d: %d\n", n, sum_n(sum, n));
    	
    	return 0;
    }
    In dem fall ist es Sinnlos das über eien rekursive funktion zu machen -> wie du siehst ist eine referenz in der sum_n parameter liste noetig.

    Klar geht es so aber warum machst du nicht einer while schleife

    So ungefähr
    Code:
    int sum_n(int n){
    	int sum = 0;
    	while (n > 0){
    		sum += n;
    		--n;
    	}
    	return sum;
    }
    Wenn du es noch kürzer haben willst dann

    Code:
    int sum_n(int n){
    	int sum = 0;
    	while (n > 0)
    		sum += n--;
    	return sum;
    }
     
  5. anegmawad

    anegmawad Mitglied

    Beiträge:
    583
    Zustimmungen:
    68
    Mitglied seit:
    12.04.2007
    Beides ist eine Funktion. Das sieht auch der Compiler ziemlich so:
    Da steht nicht:
    Da steht:
     
  6. coacetan

    coacetan Mitglied

    Beiträge:
    33
    Zustimmungen:
    2
    Mitglied seit:
    15.01.2008
    Es soll Leute geben die nicht gcc verwenden.

    Der Intel Compiler sagt was anderes. Das ist jetzt eben die Geschichte wer sich an den C Standard hält. ;)

    zumal ich oben sagte das sum_n eine funktion (ich hab nur die bedingung dazugeschrieben). Lies mal genauer ;)
     
  7. anegmawad

    anegmawad Mitglied

    Beiträge:
    583
    Zustimmungen:
    68
    Mitglied seit:
    12.04.2007
    Was sagt er denn …

     
  8. coacetan

    coacetan Mitglied

    Beiträge:
    33
    Zustimmungen:
    2
    Mitglied seit:
    15.01.2008
    Soll ich dir hinpinkeln um es zu markieren oder wie


     
  9. anegmawad

    anegmawad Mitglied

    Beiträge:
    583
    Zustimmungen:
    68
    Mitglied seit:
    12.04.2007
    Es wäre nett, wenn du es einfach hier schreiben würdest. Ist ja eigentlch nicht so schwer, das mal eben hierher zu kopieren …

    Ansonsten ein kleiner Link von mir:
    http://de.wikipedia.org/wiki/Konjunktiv
     
  10. oneOeight

    oneOeight Mitglied

    Beiträge:
    49.748
    Zustimmungen:
    4.382
    Mitglied seit:
    23.11.2004
    du hast doch auch vorher java programmiert, hast du da je in main() selbst eine methode gesehen ;)
     
Die Seite wird geladen...
Ähnliche Themen - Schritten Forum Datum
UISlider min0,1 max10 ab 3,0 in 0,5er schritten bis 10 Mac OS Entwickler, Programmierer 01.09.2011

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.