Warum meldet sich der C ++ - Compiler nicht, wenn ich Funktionen ohne Klammern verwende?

7

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?

    
samkpo 18.06.2012, 11:57
quelle

3 Antworten

12

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.

    
Bo Persson 18.06.2012, 11:59
quelle
11

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:

%Vor%     
Charles Bailey 18.06.2012 12:00
quelle
3
%Vor%

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.

    
Edmund 18.06.2012 12:00
quelle

Tags und Links