Ich schaute auf einen Code, den mir ein Freund schickte, und er sagte: "Es kompiliert, funktioniert aber nicht". Ich sah, dass er die Funktionen ohne Klammern, etwa wie folgt verwendet:Warum meldet sich der C++ - Compiler nicht, wenn ich Funktionen ohne Klammern verwende?
void foo(){
cout<< "Hello world\n";
}
int main(){
foo; //function without parentheses
return 0;
}
Der erste sagte, ich sei „klammern Sie müssen“. Und dann habe ich diesen Code getestet - er kompiliert, aber wenn er ausgeführt wird, funktioniert er nicht (keine "Hallo Welt").
Also, warum kompiliert es (keine Warnung vom Compiler GCC 4.7), aber funktioniert nicht?
Es funktioniert tatsächlich. 'foo' wird so behandelt, wie es ist, ein Funktionszeiger. Die Zeile 'foo;' ist nur eine Zeile ohne Wirkung. Wenn Sie Ihre Warnungen auf das Maximum setzen, sollten Sie eine Warnung über eine Aussage ohne Wirkung erhalten. – RedX
Ich sehe * "Warnung: Anweisung ist eine Referenz, kein Aufruf, Funktion 'foo'" * und * "Warnung: Anweisung hat keine Wirkung" *. Sie möchten wahrscheinlich mit -Wall -Wextra – Flexo
kompilieren (Für zukünftige Fragen lohnt es sich, die '#include' und alle Namespace Zeug auch, um Ihre Probe abgeschlossen) –
Flexo