mikrocontroller.net

Forum: Compiler & IDEs "MIN" Funktion... woher?


Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

in der ENC28j60 Software in der Codesammlung kommt die Zeile
len = MIN(len, maxlen);

vor. Ich nutze keinen AVR und musste diese Zeile rausnehmen, da sie dem 
Compiler unbekannt war. Das Programm antwortet nicht auf den Ping den 
ich sende. Ich dachte es könnte daran liegen.
Woher stammt diese MIN Funktion? AVR-lib ?

Könnte ich die irgendwie umschreiben?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Grossschreibung MIN deutet auf ein Makro hin.

#define MIN(foo, bar) ((foo) < (bar) ? (foo) : (bar))

Das kann allerdings problematisch sein, weil innerhalb des Makros 
Argumente mehrfach auftreten. Und bei Argumente mit Seiteneffekten geht 
das schief

irgendwas = MIN(++x, y--);

Würde durch die Textersetzung zu

irgendwas = ((++x) < (y--) ? (++x) : (y--));

In C++ könnte man das eleganter und gefahrloser lösen...
http://www.wachtler.de/cpp/node33.html

Autor: Feadi F. (feadi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uint16_t MIN( uint16_t a, uint16_t b )
{
  if ( a > b )
    return b;
  else
    return a;
}

  

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die einfachste Lösung:
#define MIN(a,b) (((a)>(b))?(b):(a))

Aber Achtung: Wie bei defines üblich, musst du mit den Argumenten 
aufpassen: MIN(a++,b) liefert nicht das gewünschte! (a wird um 2 
erhöht!)

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
alles Klar. Es ist wirklich ein Makro. Habs demnach auch in einer .h 
Datei gefunden.
avrlibdefs.h

Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.