Ich habe festgestellt, dass man mit dem C18 Compiler eine Subroutine auch ohne Klammern "aufrufen" kann. Also foo; anstatt foo();
Das geht mit jedem C Compiler, da auch foo ohne Klammern syntaktisch korrektes C ist. Der Identifier foo ist die Adresse der aufzurufenden Funktion, d.h.
foo;
entspricht z.B.
0x1234;
wenn die Funktion foo an der Adresse 0x1234 beginnt. Das ist ein gültiges Statement in C, bewirkt aber absolut gar nichts. Die meisten Compiler erzeugen dafür eine Warnung („diagnostic message“) wie „statement with no effect“, müssen es nach dem ANSI-Standard aber nicht. Der C18 ist mit Warnungen generell eher sparsam, produziert manchmal ungerechtfertigte Warnungen und läßt mitunter auch gemäß dem ANSI-Standard illegalen Code zu.
Viele Grüße
Bernd