Tips für Programmieren 1 & 2
Hier ein paar Tips für Programmieren 1 und 2 (bzw. eigentlich alles wo man programmieren muss)
- NUR das Programmieren was auch in der Angabe steht
Also nicht ein schönes Menü etc basteln, wenn das nicht verlangt ist. Dafür geht kostbare Zeit verloren!
Bei den meisten Übungen in Prog 1 und Prog 2 reicht es vollkommen einfach nur alle Funktionen von main aus zu testen.
- Wenn der Compiler mehrer Fehlermeldungen wirft IMMER zuerst den ersten Fehler beheben und dann nochmal testen
Oft verursachen Fehler nämlich Folgefehler.
- Auch die Warnings beinhalten oft sinnvolle Meldungen
Warnings zeigen z.b. falsche Argumente bei printf bzw. scanf oder dass man einen falschen Pointer übergibt.
- Sollten bei einer Berechnung ein falsches Ergebnis herauskommen und man sieht den Fehler nicht, dann einfach Zwischenergebnisse auf dem Bildschirm ausgeben lassen
printf
- Bei unklaren oder nicht verstandenen Angaben nicht einfach herumprobieren sondern fragen!
Compilermeldungen und ihre Bedeutung
Hier eine Sammlung von Fehlermeldungen und ihre Bedeutung.
Fehlermeldungen haben immer das Format:
...c:5: warning: format ?%lg? expects type ?double?, but argument 2 has type ?int?
DATEINAME:ZEILENNUMMER: warning bzw error: ....
Die ganze Ausgabe des Compilers befindet sich im Messages-Fenster (Knopf ganz unten im KDeveloper).
-
...c:5: warning: format ?%lg? expects type ?double?, but argument 2 has type ?int?
Bei einem printf oder scanf steht zwar im Formatstring %lg aber übergeben wurde ein integer (das kann mit allen möglichen Datentypen passieren)
-
....c:6: warning: implicit declaration of function ?test?
genau an dieser Stelle wurde die Funktion test() aufgerufen, sie wurde jedoch zuvor noch nie deklariert! Funktion z.b. in main aufgerufen, aber erst nach main deklariert?
-
....c:7: warning: control reaches end of non-void function
Dieses Warning heisst, dass man eine Funktion nicht als void deklariert hat (z.b. int foo() { ... }), jedoch in dieser Funktion nie ein return vorkommt bzw. nicht in allen Pfaden ein return vorkommt. (z.b. int foo(int a) {if(a==0) { return 1;} } - falls a nicht 0 ist wird hier kein return ausgeführt)
-
/usr/bin/ld: Undefined symbols: _test
Das heisst, dass der Linker die Funktion test nirgends finden kann. Passiert z.b. oft mit sqrt oder ähnlichem, dann wurde vergessen die Mathematikbibliothek dazuzulinken.