wertet seinen ersten Operanden aus und verwirft das Ergebnis, wertet dann den zweiten Operanden aus und gibt diesen Wert (und Typ) zurück.
Für eine “irgendwie praktische” Verwendung, if (condition) return fprintf(stderr, "Debug message\n"), FALSE; Wenn Sie vorübergehend eine Debug-Meldung hinzufügen möchten, ohne auch Klammern hinzufügen zu müssen.
– Robert Fischer
22. Juli 2013 um 15:45 Uhr
@RobertFisher interessant … kann es auch sein i = DEBUG_VALUE, j;
– Grijesh Chauhan
22. Juli 2013 um 16:39 Uhr
Es ist erwähnenswert, dass der Wert von pOutFilename wird implizit umgewandelt in bool. Vorausgesetzt pOutFilename ein Zeiger ist, ist das Ergebnis false wenn pOutFilename ist ein Nullzeiger, true Andernfalls.
– Keith Thompson
22. Juli 2013 um 20:09 Uhr
Grijesh Chauhan
Ihr Ausdruck bool bRet = (pData, pOutFilename); ist ein gültiger Ausdruck und entspricht dem Ausdruck bool bRet = pOutFilename;
Im bool bRet = (pData, pOutFilename);erster Ausdruck pData ausgewertet wird, dann der zweite Ausdruck pOutFilename ausgewertet wird, dann wird der Wert des zweiten Ausdrucks zugewiesen bRet (das ist wie , Bediener arbeitet von links nach rechts).
Der Kommaoperator , hat left-to-right associativity. Zwei durch ein Komma getrennte Ausdrücke werden von links nach rechts ausgewertet. Der linke Operand wird immer ausgewertet, und alle Seiteneffekte werden abgeschlossen, bevor der rechte Operand ausgewertet wird.
Um die Bedeutung von Klammern zu verstehen ( ) Betrachten Sie in Ihrem Ausdruck mein Beispiel unten. Beachten Sie die Ausgabe in diesem Beispiel (ich habe ein C-Beispiel):
int main () {
int i = 10, b = 20, c= 30;
i = b, c; // i = b
printf("%i\n", i);
i = (b, c); // i = c
printf("%i\n", i);
}
Ausgang:
20
30
Um die Ausgabe zu verstehen: schau dir die Vorrangtabelle an, haben einen niedrigeren Vorrang als =. In Ihrem Ausdruck müssen Sie die Priorität mit Klammern überschreiben.
Außer wenn pData hat Nebenwirkungen, schätze ich.
– Joey
22. Juli 2013 um 10:29 Uhr
was es nur haben könnte, wenn es ein Makro wäre
– Stefano Falasca
22. Juli 2013 um 10:30 Uhr
@StefanoFalasca Wenn pData nicht initialisiert ist, ist es möglich, die verschiedenen anwendbaren Standards so zu interpretieren, dass dies bedeutet pData in pData, pOutFilename ist manchmal undefiniertes Verhalten. Es kann auch etwas passieren, wenn pData ist eine Gleitkommavariable, die eine Signalisierungs-NaN enthält, aber darüber weiß ich nicht viel.
– Pascal Cuoq
22. Juli 2013 um 10:37 Uhr
Santhosh Pai
Es ist ein , Komma-Operator. Wenn Sie einen Ausdruck wie diesen haben:
i = (a, b);
b wird darin gespeichert i .
Also in deinem Fall:
bRet = pOutFilename;
pOutFilename wird darin gespeichert bRet.
13105700cookie-checkWarum wird dieser C++-Code kompiliert? Was tut es? [duplicate]yes
Überprüfen Sie den Kommaoperator. Gleich wie
pData; bool bRet=pOutFilename;
– LS_ᴅᴇᴠ
22. Juli 2013 um 10:30 Uhr