Ich habe mir einen Code angesehen, den ein Freund mir geschickt hat, und er hat gesagt: "Es kompiliert, funktioniert aber nicht". Ich sah, dass er die Funktionen ohne Klammern benutzte, etwa so:
%Vor%Das erste, was ich sagte, war "Klammern verwenden, müssen Sie". 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 ), funktioniert aber nicht?
Es warnt Sie, wenn Sie die Warnstufe hoch genug einstellen.
Ein Funktionsname wird zur Adresse der Funktion ausgewertet und ist ein zulässiger Ausdruck. Normalerweise wird es in einem Funktionszeiger gespeichert,
%Vor%aber das ist nicht erforderlich.
Sie müssen die von Ihnen verwendete Warnstufe erhöhen. foo;
ist eine gültige Ausdruckanweisung (der Name einer Funktion wird in einen Zeiger auf die benannte Funktion umgewandelt), hat jedoch keine Auswirkung.
Normalerweise verwende ich -std=c++98 -Wall -Wextra -pedantic
, was folgendes ergibt:
Sie benutzen die Funktion hier nicht wirklich. Sie verwenden nur die Adresse. In diesem Fall nehmen Sie es aber nicht wirklich.
Adressen von Funktionen (d. h. ihre Namen ohne Klammern) sind nützlich, wenn Sie diese Funktion als Callback an eine andere Funktion übergeben möchten.
Tags und Links compilation c++ parentheses