Nicht angemeldet. · Kennwort vergessen · Registrieren

apfel
Mitglied seit 04/2011
33 Beiträge
Betreff: 2007-07-SPiC-KlausurEEIML Beispielklausur
Guten Tag,
in der Beispielklausur http://www4.informatik.uni-erlangen.de/Lehre/WS11/V_GSPIC/…
Aufgabe 2a)
steht: "Die Funktion soll bei ungültigen Werten für what oder int_nr nichts tun."
Was passiert nun bei der Musterlösung, wenn man etwas ungültiges für what eingibt? Müsste dieser Fall nicht durch ein return am Ende der Funktion abgefangen werden oder geht C dann automatisch aus der Funktion raus?

Kleine Frage am Rande: Wird das unsigned charArray verwendet, um Platz im Speicher zu sparen? Wäre es ein Fehler gewesen, ein intArray zu verwenden?

Gruß
morty
SPiC-Meister
(Moderator)
Mitglied seit 05/2011
331 Beiträge
Zitat von apfel:
steht: "Die Funktion soll bei ungültigen Werten für what oder int_nr nichts tun."
Was passiert nun bei der Musterlösung, wenn man etwas ungültiges für what eingibt? Müsste dieser Fall nicht durch ein return am Ende der Funktion abgefangen werden oder geht C dann automatisch aus der Funktion raus?
Ähnliche Beispiele findest du in Kapitel 5.

Zitat von apfel:
Kleine Frage am Rande: Wird das unsigned charArray verwendet, um Platz im Speicher zu sparen? Wäre es ein Fehler gewesen, ein intArray zu verwenden?
Auf dem ATmega zeigt die Verwendung von int, dass der Programmierer zu wenig Ahnung von seiner Plattform hat. Es hätte aber wohl keinen Punkt Abzug gegeben, weil das Programm immer noch funktioniert. Deutlich schöner wäre übrigens die Verwendung von uint8_t gewesen. Warum das so ist, darf hier gerne diskutiert werden.
Steppenwolf
GSPiC-Übungsleiter
Mitglied seit 05/2011
31 Beiträge
Antwort auf Beitrag #1
Zitat von apfel:
steht: "Die Funktion soll bei ungültigen Werten für what oder int_nr nichts tun."
Was passiert nun bei der Musterlösung, wenn man etwas ungültiges für what eingibt? Müsste dieser Fall nicht durch ein return am Ende der Funktion abgefangen werden oder geht C dann automatisch aus der Funktion raus?

Ich bin mir nicht sicher, ob ich deine Frage richtig verstanden habe, aber in C (wie in den meisten anderen Sprachen auch) gilt: Wenn die schließende geschweifte Klammer einer Funktionsdefinition mit Rückgabetyp void erreicht wird, wird die Funktion verlassen. In void-Funktionen braucht man also normalerweise keine return-Anweisung, außer man will "mitten in der Funktion" die Funktion verlassen, z. B. aufgrund einer erfüllten Bedingung. Alles klar?
apfel
Mitglied seit 04/2011
33 Beiträge
@Steppenwolf
Ja, genau das habe ich gemeint. Dankeschön.
andi91
Mitglied seit 11/2011
36 Beiträge
Betreff: 2007-07-SPiC-KlausurEEIML Beispielklausur
Ich hätte auch mal ein paar Fragen zu dieser Aufgabe und zwar der 2 b)

Wieso ist in der Musterlösung main  als int main(int argc, char **argv) definiert? Ich hätte jetzt einfach void main(void){..} geschrieben, ginge das auch?
Außerdem hätte ich für die Variablen sensor und lastmw einfach uint8_t statt unsigned char genommen, da der Port ja nur Werte von 0-255 liefert, ist das richtig?
Danke schonmal für die Antwort!
morty
SPiC-Meister
(Moderator)
Mitglied seit 05/2011
331 Beiträge
@andi91: Das sind noch Altlasten aus die SP-Zeiten (Die entsprechende Vorlesung für Informatiker). _Etwas vereinfacht_:
Laut C-Standerd ist "main" als
  1. int main(int argc, char **argv)
definiert. Das macht aber auf einem uC wenig Sinn, da es hier kein Betriebssystem gibt, welches dem Programm Parameter übergeben könnte oder an das man einen Rückgabewert (Programm erfolgreich/Fehler) zurückmelden könnte. Daher wird hier davon abgewichen.
sicherha
Informatik-Veteran
Mitglied seit 10/2010
53 Beiträge
Antwort auf Beitrag #5
Zitat von andi91:
Außerdem hätte ich für die Variablen sensor und lastmw einfach uint8_t statt unsigned char genommen, da der Port ja nur Werte von 0-255 liefert, ist das richtig?
Danke schonmal für die Antwort!
uint8_t und unsigned char sind dasselbe. Ersteres ist natürlich kürzer und damit weniger Schreibarbeit in der Klausur. ;-)
andi91
Mitglied seit 11/2011
36 Beiträge
Alles klar, vielen Dank für die Antworten!!!
morty
SPiC-Meister
(Moderator)
Mitglied seit 05/2011
331 Beiträge
Antwort auf Beitrag #7
Zitat von sicherha am 16.03.2012, 15:52:
uint8_t und unsigned char sind dasselbe. Ersteres ist natürlich kürzer und damit weniger Schreibarbeit in der Klausur. ;-)
Wenn wir gerade dabei sind: Das gilt nur bei char, weil das eines der wenigen C-typen ist, von denen man genau weiß wie groß sie sind. Bei fast allen anderen gibt es nur Mindestgrößen und die tatsächliche Größe hängt von der Laune des Compilerpogrammierers ab. Siehe auch http://en.wikipedia.org/wiki/C_data_types
andi91
Mitglied seit 11/2011
36 Beiträge
Mal angenommen in der Programmieraufgabe ist nicht stdint.h inkdludiert, dürfen wir dann trotzdem uint8_t usw schreiben?
sicherha
Informatik-Veteran
Mitglied seit 10/2010
53 Beiträge
Klar. Wenn du ganz auf Nummer sicher gehen willst, kannst du auch das fehlende #include ergänzen. ;-)
Schließen Kleiner – Größer + Auf diesen Beitrag antworten:
Prüfcode: VeriCode Gib bitte das Wort aus dem Bild ins folgende Textfeld ein. (Nur die Buchstaben eingeben, Kleinschreibung ist in Ordnung.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Weitere Zeichen:
Gehe zu Forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen