code debuggen |
|
tag, ich hab n bissy an einem code rumgeschrieben. ich wollte mal fragen ob ihr mir an 5-6 stellen helfen könnt, diesen zu debuggen, da ich mit den compileransagen nicht ganz zurecht komme.
Das Programm simuliert quasi eine Art Artikelverwaltung. Mit Artikel in Listen aufnehmen mit Name/Preis/Kommentar/Verfügbarkeit etc, das abändern dieser Listen sowie das aufnehmen von Bestellungen und das Generieren von Rechnungen. Ich weiß nicht, was ihr vom Stil haltet, ich hab versucht, oft wiederkehrende Schritte so gut es geht in Funktionen abzulegen, und auch die Variablenbenennung so eindeutig wie möglich zu wählen. Die Fehler um die es mir geht, werden euch beim Compilieren schon auffallen, aber ich poste sie nochmal
Zitat: |
root@Sebastian-Unix:/home/sebastian/Desktop# gcc preise.c
preise.c
7: Warnung: mehrere Token am Ende der Direktive #else
preise.c: In Funktion »laden«:
preise.c:78: Warnung: return erzeugt Zeiger von Ganzzahl ohne Typkonvertierung
preise.c: In Funktion »list«:
preise.c:206: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »calloc« preise.c:254: Warnung: »return« mit Wert in void zurückgebender Funktion
preise.c: In Funktion »change«:
preise.c:294: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »calloc« preise.c:359: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »calloc«
preise.c: In Funktion »verf«:
preise.c:460: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »calloc«
preise.c: In Funktion »best«:
preise.c:558: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »calloc« preise.c:580: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »calloc«
preise.c: In Funktion »rechnung«: preise.c:697: Warnung: »return« mit Wert in void zurückgebender Funktion /tmp/ccby3K1h.o: In function `laden':
preise.c
.text+0x5f): warning: the `gets' function is dangerous and should not be used. |
|
außerdem noch die Frage, welche Befehle benutze ich um unter Linux in Dateien zu schreiben? Denn mit fprintf() mag er net...
Also hier is der Code: http://rafb.net/p/T3u2aP53.html
Ach und nochwas, wie muss ich die Präprozessorweisungen ändern, damit er unter Linux die richtige Definition für CLEAR lädt, denn momentan definiert er CLEAR als system("cls"); trotz betriebes unter Linux
__________________ Alle sagten, es geht nicht, da kam einer, der wusste das nicht und tat es einfach...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Schatten: 21.07.2008 17:56.
|
|
21.07.2008 17:54 |
|
|
|
zunächstmal, du möchtest stdlib.h bei deinen includes haben ... (alle calloc fehler)
return mit klammern und argument ... gnahahahaa ... das ist keine funktion, auch wenn die schreibweise erlaubt ist...
was dir in zeile 78 angekreidet wird:
code: |
1:
2:
3:
4:
5:
6:
|
FILE* laden()
{
...
return (int)1;
}
|
|
die funktion gibt laut definition einen FILE-pointer zurück ... du gibst einen int zurück ... was wird hier wohl nicht stimmen?!
wenn du nun sagst "aber pointer sind 4 byte groß, ints sind 4 byte groß, wo ist der unterschied?" ... das ist reiner zufall, wenn das auf einem system so ist ... 64bit ints sind auch nicht ungewöhnlich... integer sind per definition keine pointer ... es gibt auch architekturen auf denen int standardmäßig nur 16 bit groß ist ...
zeile 254 ein ähnliches spiel ...
die funktion hat den typ void und du schreibst ein return 0;
void heißt dass die funktion NICHTS zurück gibt ... 0 ist ein int
697 ... gleiches spiel ...
die letzte warning geht in zeile 71 auf dein konto ... gets() ist eine potentiell gefährliche funktion, da ein bufferoverflow zu befürchten ist ... eine alternative stellt z.b. fgets() dar ...
__________________ Gräten auf dem Sofakissen wird man wohl entfernen müssen.
|
|
21.07.2008 19:53 |
|
|
|
also das mit gets is gefixed, die stdlib ist eingebunden...
ein problem habe ich aber noch mit den preprozessoranweisungen. es wird nicht erkannt, dass das programm auf einem UNIX artiken system läuft. ich habe folgende anweisungen
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
#ifdef __UNIX__
#define CLEAR printf("\x1B[2J");
#elif defined __WIN32__
#define CLEAR system("cls");
#else
#define CLEAR
#endif |
|
und trotzdem lande ich, wenn ich den code unter ubuntu compiliere, immer in der #else anweisung d.h eine leerdefinition von clear..
__________________ Alle sagten, es geht nicht, da kam einer, der wusste das nicht und tat es einfach...
|
|
22.07.2008 16:03 |
|
|
|