Freigeben über


Bei Verwendung eines Funktionsnamens ohne "()" wird kein Code generiert

Wenn ein im Programm deklarierter Funktionsname ohne Klammern verwendet wird, generiert der Compiler keinen Code. Dies tritt unabhängig davon auf, ob die Funktion Parameter verwendet, da der Compiler die Funktionsadresse berechnet. Da der Funktionsaufrufoperator "()" jedoch nicht vorhanden ist, wird kein Aufruf durchgeführt. Das Ergebnis sieht ungefähr wie folgt aus:

// compile with /Wall to generate a warning
int a;
a;      // no code generated here either

In Visual C++ wird selbst bei Verwendung von Warnstufe 4 keine Diagnoseausgabe generiert. Es wird keine Warnung ausgegeben und kein Code erzeugt.

Der unten aufgeführte Beispielcode wird (mit einer Warnung) kompiliert und führt eine ordnungsgemäße Verknüpfung ohne Fehler aus, generiert jedoch keinen Code, der auf funcn( ) verweist. Damit dies ordnungsgemäß funktioniert, fügen Sie den Funktionsaufrufoperator "()" hinzu.

#include <stdio.h>
void funcn();

int main() {
   funcn;      /* missing function call operator;
                  call will fail.  Use funcn() */
   }

void funcn() {
   printf("\nHello World\n");
}

Siehe auch

Codeoptimierung