Szukałem jakiegoś kodu, który przysłał mi przyjaciel, a on powiedział: "Kompiluje, ale nie działa". Widziałem, że użył funkcji bez nawiasów, coś takiego:Dlaczego kompilator C++ nie narzeka, gdy używam funkcji bez nawiasów?
void foo(){
cout<< "Hello world\n";
}
int main(){
foo; //function without parentheses
return 0;
}
Pierwszy Powiedziałem tylko „stosowanie nawiasów, trzeba”. A potem przetestowałem ten kod - kompiluje się, ale po uruchomieniu nie działa (nie wyświetla się "Witaj świecie").
Dlaczego więc się kompiluje (brak ostrzeżenia z kompilatora GCC 4.7), ale nie działa?
To faktycznie działa. 'foo' jest traktowane tak, jak jest, wskaźnikiem funkcji. Linia 'foo;' jest po prostu linią bez efektu. Jeśli zmienisz ostrzeżenia na maksimum, powinieneś otrzymać ostrzeżenie o wyciągu bez skutku. – RedX
Widzę * "ostrzeżenie: instrukcja to odwołanie, a nie wywołanie, do funkcji" foo "" * i * "ostrzeżenie: instrukcja nie ma wpływu" *. Prawdopodobnie chcesz skompilować z opcją -Wall -Wextra – Flexo
(W przypadku przyszłych pytań warto wstawić też "#include" i dowolną przestrzeń nazw, aby przygotować próbkę) –
Flexo