5 Stimmen

Was sind die Nebenwirkungen des folgenden Makros in C? Embedded C

#define MIN(A,B) ((A) <=  (B) ? (A) : (B))

das ist das Makro, ich wurde gefragt, was der Nebeneffekt wäre, wenn ich Folgendes benutze:

least = MIN(*p++, b);

Hinweis: Dies war eine eingebettete C-Frage

8voto

cnicutar Punkte 173420

Es bewertet p++ zweimal. Auch, da die erste Bewertung p ändert, wird es beim zweiten Mal auf ein anderes Element zeigen. Daher wird der zurückgegebene Wert *(initialp + 1) oder b sein.

Du solltest es selbst ausprobieren.

7voto

Matteo Punkte 14040

Das Makro wird erweitert zu:

least = ((*p++)<=(b)?(*p++):(b))

Sie haben dann *p++ zweimal in Ihrer Anweisung (d. h. es wird zweimal erhöht).

2voto

Gregory Pakosz Punkte 66918

*p++ wird zweimal ausgewertet, da das Makro zu *p++ <= b ? *p++ : b erweitert wird

Außerdem gibt es keine "embedded C".

1voto

Ashok Punkte 11

Gehen Sie davon aus, dass die Anfangsadresse von p = 0xfcf0 ist, *p = 1, b = 2, Wert @ 0xfcf4 = 5 und Wert @ 0xfcf8 = 15

Das Makro wird wie folgt erweitert:

least = ((*p++) <= (b) ? (*p++) : (b));

d.h. least = ((1) <= (2) ? (*p++) : (b));

da *p zweimal erhöht wird.

1) *p++ --> jetzt zeigt p auf Adresse 0xfcf4;

2) *p++ --> jetzt zeigt p auf Adresse 0xfcf8;

Also least = 15; (die Werte in der Adresse 0xfcf8). Hoffe, es hilft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X