Udostępnij za pośrednictwem


Korzystanie z nazwy funkcji bez () nie tworzy kodu

Gdy nazwa funkcji zadeklarowana w programie jest używana bez nawiasów, kompilator nie generuje kodu. Dzieje się tak niezależnie od tego, czy funkcja przyjmuje parametry, ponieważ kompilator oblicza adres funkcji; jednak, ponieważ operator wywołania funkcji "()" nie jest obecny, nie jest wykonywane wywołanie. Ten wynik jest podobny do następującego:

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

W języku Visual C++, nawet przy użyciu poziomu ostrzeżenia 4 nie generuje żadnych danych wyjściowych diagnostycznych. Nie jest wyświetlane żadne ostrzeżenie; nie jest generowany żaden kod.

Poniższy przykładowy kod kompiluje (z ostrzeżeniem) i łączy się poprawnie bez błędów, ale nie generuje kodu w odwołaniu do funcn( ). Aby to działało poprawnie, dodaj operator wywołania funkcji "()".

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

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

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

Zobacz też

Optymalizacja kodu