Das ist schätzungsweise keine Funktion, sondern ein Makro. Makros werden
durch Code ersetzt, also z.B.
#define ADD(var1,var2) ( var1 += var2 )
ADD(x,5);
ADD(x,7);
Vor der Übersetzung macht der Compiler daraus:
(x += 5);
(x += 7);
Es ist also nicht nötig, eine Referenz zu übergeben und dennoch wird der
Wert der Variablen verändert. Auch wenn es so ausschaut wie ein
Funktionsaufruf. Wäre es eine Funktion:
void ADD(int var1, int var2)
{
var1 += var2;
}
...
ADD(x,5);
So würde das nicht wie gewollt funktionieren, da nur var1 verändert
wird, aber nicht x.
Der Einwurf von Stefan ist natürlich korrekt: in bit_write muss man var
erst dereferenzieren: *var = ...