Wenn NULL
als ((void *)0)
oder (0)
definiert ist, wird dies auf f ((void *)0)
oder f (0)
erweitert, was richtige Funktionsaufrufe sind. Der Code ist für alles falsch, das während der Kompilierung nicht in Klammern gesetzt wurde.