Forum: PC-Programmierung Makro MAX und ?


von Ma B. (drumstick)


Lesenswert?

Guten Tag!

Ich lerne c mit dem dev-c++.

nun bin ich auf folgende Übung gestossen:

Makros:
1
#include<stdio.h>
2
#define MAX(a, b) ((a) < (b) ? (b) : (a))
3
4
int main(int argc, char *argv[])
5
{
6
  int zahla=8, zahlb=7;
7
  printf("Maximum: %d\n", MAX(zahla, zahlb));  
8
  getchar();
9
  return 0;
10
}

kann man dies erklären, vorallem die Bedeutung von ?

Danke und Gruss!

M.B.

von asdfg (Gast)


Lesenswert?

f*ck, falschen Knopf gedrückt Antwort weg grrrr...

Nochmal: ?: ist eine Art if in Kurzform (s. C-Buch deiner Wahl), man 
könnte auch eine Funktion
1
int max(const int a, const int b)
2
{
3
  if(a<b)
4
    return b;
5
  else
6
    return a;
7
}
schreiben. Das Makro hat den Vorteil dass es mit double, float und int 
funktioniert.

Nachteil: Die Parameter werden u.U. zweimal ausgewertet, MAX(a++,b) 
führt nicht unbedingt zum vermuteten Ergebnis (probier es mal aus!).

von Ma B. (drumstick)


Lesenswert?

Vielen Dank!

? Kurzform von if steht in keinem meiner zwei c Bücher!

Aber so ist es klar!!

Grüsse!

M.B.

von asdfg (Gast)


Lesenswert?

M. B. schrieb:
> ? Kurzform von if steht in keinem meiner zwei c Bücher!
Hm, dann taugen die wohl nichts. Wenn du Englisch kannst besorg dir "The 
C Programming Language" 2nd edition von Brian W. Kernigham und Dennis M. 
Ritchie, das ist die "Bibel" von der Erfindern der Sprache persönlich 
verfasst.

von DirkB (Gast)


Lesenswert?

Das Stichwortist ist Ternärer Operator

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

asdfg schrieb:
> Wenn du Englisch kannst besorg dir "The
> C Programming Language" 2nd edition von Brian W. Kernigham und Dennis M.
> Ritchie, das ist die "Bibel" von der Erfindern der Sprache persönlich
> verfasst.

Dazu muss man kein Englisch können, die deutschsprachige Übersetzung ist 
vorzüglich ("Programmieren in C", 2. Ausgabe, Hanser-Verlag).

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rufus Τ. Firefly schrieb:
> Dazu muss man kein Englisch können, die deutschsprachige Übersetzung ist
> vorzüglich ("Programmieren in C", 2. Ausgabe, Hanser-Verlag).

Aber unbedingt auf die zweite Ausgabe achten!  Die erste ist nicht
nur technisch veraltet (auch wenn's natürlich den ternären Operator
auch da schon gab), sondern deren deutsche Übersetzung war völlig
neben der Spur.  Die hat lediglich Unterhaltungswert.

von Ma B. (drumstick)


Lesenswert?

Und das Lösungsbuch? Hat die Ausgabe viele Beispiele?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jörg Wunsch schrieb:
> Aber unbedingt auf die zweite Ausgabe achten!

Mal ehrlich, wo außer in einem sehr gut sortierten Antiquariat (oder 
meinem Bücherregal) findet man die noch? Die zweite Ausgabe ist auf 
Deutsch Anfang der 90er Jahre erschienen ...

von Karl H. (kbuchegg)


Lesenswert?

M. B. schrieb:
> Und das Lösungsbuch? Hat die Ausgabe viele Beispiele?

Es hat viele Beispiele. Es hat viele Aufgaben.
Und ob es ein Lösungsbuch gibt oder nicht, weiß ich nicht.
Brauchst du aber auch nicht. Wenn du das Buch von Anfang an 
durcharbeitest, sagt dir dein Computer, ob deine Lösung richtig ist. Und 
mit mehr Erfahrung und Übung wird es dir so gehen wie allen: Sieht man 
sich seine ersten Lösungen gegen Ende des Durcharbeitens noch einmal an, 
erkennt man dann schon selbst, was man schlecht gelöst hat.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rufus Τ. Firefly schrieb:
> Mal ehrlich, wo außer in einem sehr gut sortierten Antiquariat (oder
> meinem Bücherregal) findet man die noch?

Könnte ja sein, dass der TE das Buch in einem Antiquariat kaufen
will.  Auch die zweite Ausgabe kann man da sicher u. U. finden.

Die zweite Ausgabe scheint aber auch gebraucht bei Amazon reichlich
vorhanden zu sein.  Die erste konnte ich (zum Glück ;) nicht
entdecken.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.