Funktionsaufrufe mit komma getrennt?

hallo.

hier mal etwas, das funktioniert, mir aber so noch nie begegnet ist:

#define Com_Write(ptr) (\
Com_SuspendInterrupts(), \
Com.signal = *((unsigned char*)ptr), \
Com_ResumeInterrupts(), \
Com_RetErr[COM_ERR_1])

der zugehörige aufruf sieht so aus:

Com_Write(&data);

wo kann man nachlesen, daß man das so machen kann?

würde ich mit
a = Com_Write(&data);
was sich auch compilieren läßt)den wert von Com_RetErr[COM_ERR_1] zurückkriegen?

gruß

michael

der die statements im makro ganz „normal“ mit ; abgeschlossen und eine geschweifte klammer um das ganze gesetzt hätte.

Ja,

werden Befehle durch Kommata getrennt, dann werden sie als Verbundkommando gewertet, die Rückgabe ist dann die des letzten Befehls. Wird oft in der Definition von for-Schleifen verwendet, wenn es zwei zusammenhängende Laufvariablen gibt, z.B. ein Pointer und eine Zahl.

for(ptr=start, count=0; count

hoi,

sicherlich kannst du funktionsaufrufe in makrodefinitionen (und auch anderweitig) als parameterliste übergeben.

mehr zu makros in C/C++:

ich hoffe das hilft dir ein bissl weiter.

greetz, me, mhb