2016-04-03 8 views
-1

machte ich einen Tippfehler, die wie folgt aussieht:Xcode LLVM Ebene C Ausdruck

printf("blah-blah %d %d %d",fancy_func()),1,2; 

ich einen Fehler erhalten erwartet, aber aus irgendwelchen Gründen bekam eine Warnung ‚Ausdrucksergebnis ungenutzt‘ in Bezug auf ‚1,2‘ Teil. (Ignorieren Sie fehlende Argumente)

Auch dieser Code nicht geben keine Fehler:

int x,y,z; 
x,y,z; 
// OR 
1,2,3; 

Dies sieht nicht aus wie eine Konstante oder ein Array defination. Könnte jemand erklären, warum 1,2,3; oder x,y,z; ein gültiger Code ist und was er tut?

Antwort

3

C hat eine comma operator, die Ihre Beispiele syntaktisch legal macht.

+0

So wie @ScottHunter erwähnt, ist dieser Operator nutzlos? – VenoMKO

+0

Ich würde nicht "nutzlos" sagen. Es gibt bestimmte Situationen (z. B. einen "für" -Schleife-Header), in denen Sie mehrere Aktionen ausführen möchten (z. B. zwei verschiedene Variablen inkrementieren), aber die Syntax erfordert einen Ausdruck anstelle einer Anweisung oder eines Anweisungsblocks. Mit dem Komma-Operator können Sie dies tun. –

+0

Oh, ich habe mehrere Anweisungen in einer 'for' Schleife vergessen. Danke, du hast mich auf den richtigen Weg gebracht! – VenoMKO

1

Die Listen machen nichts; sie sind Listen einfacher Ausdrücke. Sinnlos (wie Sie sie hier benutzt haben), aber nicht illegal.