Neulich ist mir beim “Code Review” von altem C-Code folgender Code unter die müden Augen geraten:

void foo(void* bar, int i, char ch)
{
	(*bar);

	i = 42;
	ch = 'T';
}

Mein erster Impuls war: What? Was macht ein (*bar) überhaupt? Und warum ist das da?? In anderen C-Codedateien war dann eine Antwort auf die letzte Frage zu sehen: ‘/* Verhindert einen Compilerfehler. */’ Aha!

Mal abgesehen davon, dass es durchaus mal C-Compiler gegeben hat (und vielleicht) auch immer noch gibt, die sich aus dem einen oder anderen unerfindlichem Grund an einer (relativ) harmlosen Code-Stelle verschlucken, war die erste Frage dadurch immer noch unbeantwortet. Aber die Antwort ist einfach: Nichts!

Der Ausdruck ‘(*bar)’ ist einfach eine sog. ‘Expression’, zu erkennen an den runden Klammern. Hierbei wird einfach der Inhalt, von dem worauf bar zeigt, genommen und … nichts weiter damit gemacht. Es steht also ein Byte-/Wort-/Doppelwort-Wert auf dem Stack/in einem Register und wird danach auch sofort wieder weggeschmissen, d.h. überschrieben. Es kurzer Test mit einem GCC-4.x bestätigte dann auch diese Vermutung: Die Code-Zeile erzeugte keinen(!) (Assembler-)Code.

Interessant…