Was bewirkt return value == 0; in einer Funktion

Gast #1401989
Lesenswert?

Hallo Zusammen,

ich bin dabei mich etwas einzuarbeiten und bin schon über die üblichen 
Blinkprogramme hinaus.
Ich kenne natürlich Funktionen und habe auch schon damit gearbeitet und 
das ich mit einem return einen Wert zurückgeben kann nun habe ich eine 
Funktion hier im Forum entdeckt bei der ich das return nicht verstehe 
vermutlich wieder eine kurzschreibweise oder so.
Hier mal der Quelltext:
1
uint8_t Stop (uint8_t Nr)
2
{
3
   uint16_t value;
4
   value = ARRAY[Nr];
5
   return value == 0;   // Was bewirkt diese Zeile ?????
6
}

Wäre nett wenn es jemand erklären könnte.

Franz
#1402467
Lesenswert?

Phantomix Ximotnahp schrieb:
> Nicht ganz. "false" ist definiert als 0. "true" ist definiert als "Wert
> != 0"

Fast.
Es ist richtig, dass jeder Wert ungleich 0 als true angesehen wird.
Allerdings ist auch definiert, dass  das Ergebnis "true" eines 
Vergleiches als 1 dargestellt wird. Der Compiler kann also nicht einfach 
irgendeinen Wert bei != aus dem Ärmel schütteln, sondern es muss 
tatsächlich 1 sein wenn das Ergebnis true lautet.
#1402517
Lesenswert?

Theoretisch müsst ich jetzt mein C-Buch rauskramen, wenn ich eins zur 
Hand hätte ;-)
Also im 1. Semester Informatik haben wir das so gelernt, dass true ein 
Wert != 0 ist. Ob das nun immer 1 ist kann ich grad nicht bestätigen / 
verneinen, verlassen tu ich mich jedenfalls nicht darauf.

http://info.baeumle.com/c04.html
Punkt "Logische und Vergleichsoperatoren"
> Für C ist jeder numerische Wert ungleich 0 gleichwertig
> mit TRUE (wahr), nur die 0 wird als FALSE (falsch)
> interpretiert. Dementsprechend gibt es auch logische
> Operatoren, die als Ergebnisse die Werte 0 oder
> "ungleich 0", meistens konkret den Wert 1, zurückliefern.

Der Satz bestätigt aber eher meine Aussage. Vielleicht ist die "1" 
GCC-typisch
#1402545
Lesenswert?

Phantomix Ximotnahp schrieb:
> Na schön dann glaube ich das so mal.

Entscheidend ist an dieser Stelle nicht, was in irgendeinem obskuren 
Buch steht (du glaubst gar nicht wieviele Fehler in den 
Nicht-Mainstream-Büchern enthalten sind). Entscheidend ist, was die 
genormte Sprachdefinition (der sog. 'Standard') fordert. Und dort ist 
das so festgelegt.

> Dementsprechend gibt es auch logische
> Operatoren, die als Ergebnisse die Werte 0 oder
> "ungleich 0", meistens konkret den Wert 1, zurückliefern.

Nicht 'meistens'. Er muss 1 liefern! Ansonsten ist der Compiler 
nicht-standardkonform. Und da es sich hier um etwas sehr Banales 
handelt, kannst du beruhigt davon ausgehen, dass alle Compiler das 
richtig machen. Eine Nicht-Konformität an dieser Stelle würde bei einem 
kommerziellen Compiler innerhalb 2 Wochen nach Verkaufsstart auffallen, 
wenn es nicht schon die Testsuiten in der Entwicklungsabteilung 
feststellen würden, was sehr wahrscheinlich ist. Eine derartige 
Nichtkonformität würde als sofortiger 'Showstopper' klassifiziert 
werden.
Gast #1402550
Lesenswert?

Phantomix Ximotnahp schrieb:
> http://info.baeumle.com/c04.html
> Punkt "Logische und Vergleichsoperatoren"
>> Für C ist jeder numerische Wert ungleich 0 gleichwertig
>> mit TRUE (wahr), nur die 0 wird als FALSE (falsch)
>> interpretiert. Dementsprechend gibt es auch logische
>> Operatoren, die als Ergebnisse die Werte 0 oder
>> "ungleich 0", meistens konkret den Wert 1, zurückliefern.
>
> Der Satz bestätigt aber eher meine Aussage. Vielleicht ist die "1"
> GCC-typisch

Richteste Professor Doktor von zu auf und davon Baeumle nen freundlichen 
Gruß von uns aus :-)

ISO/IEC 9899:TC2 Committee Draft -- May 6, 2005, Seite 98:
> Each of the operators < (less than), > (greater than), <= (less than
> or equal to), and >= (greater than or equal to) shall yield 1 if the
> specified relation is true and 0 if it is false.90)
> The result has type int.

Fußnote:
>90) The expression a<b<c is not interpreted as in ordinary mathematics.
> As the syntax indicates, it means (a<b)<c; in other words, ``if a is
> less than b, compare 1 to c; otherwise, compare 0 to c''.


'bool' gibt es seit C99 auch in C.
#1402553
Lesenswert?

> Richteste Professor Doktor von zu auf und davon Baeumle
> nen freundlichen Gruß von uns aus :-)

LOL nee den link hatte ich nur ergoogelt... im Studium hatten wir das 
aber auch so

> Was anderes sollte ihm bei boolschen Werten (die gibts ja
> 'eigentlich' erst ab C++ oder?) ja auch nicht übrig bleiben.

Wie wärs mit -1? g

> Wäre auch unlogisch wenn er auf die Frage ob "Value
> ungleich 0" ist mit 12 oder 45 antwortet.

Und was hat ein Computer jetzt mit Logik zu tun ;-) Nee hast schon 
recht, wenns so im Standard steht dann sei es so ;-)
#1402557
Lesenswert?

Habe grad mal nachgeschaut

http://flash-gordon.me.uk/ansi.c.txt

> 3.3.8 Relational operators
[...]
> Each of the operators < (less than), > (greater than), <= (less
> than or equal to), and >= (greater than or equal to) shall yield 1 if
> the specified relation is true and 0 if it is false./38/ The result
> has type int.

> 3.3.9 Equality operators
[...]
> The == (equal to) and the != (not equal to) operators are analogous
> to the relational operators except for their lower precedence./39/

Damit ist die Sache amtlich und geklärt :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren