den folgenden Code in C vor:dies in C-Schleife Code helfen, ein Verständnis Brauchen
void main()
{
int a=0;
for(printf("\nA"); a; printf("\nB"));
printf("\nC");
printf("\nD");
}
Wenn ich es mit Turb C++ Version 3.0 und gcc-4.3.4 kompilieren, ich folgendes als die Ausgabe erhalten in Sowohl die Fälle:
A
C
D
Allerdings, wenn ich den folgenden Code kompilieren:
void main()
{
for(printf("\nA"); 0; printf("\nB"));
printf("\nC");
printf("\nD");
}
die Ausgabe von gcc-4.3.4 ist die gleiche wie in der Pre Fall aber Turbo C++ 3.0 produziert folgende Ausgabe:
A
B
C
D
Zunächst einmal habe ich keine Ahnung, was hier passiert! Plus, wie kommt es, dass die Ausgabe des gcc-Compilers für beide Codes gleich ist, aber im Fall des turboC++ 3.0-Compilers ist die Ausgabe anders? Kann jemand bitte etwas Licht abwerfen?
EDIT:
Eigentlich jemand diese Frage in einem Interview für ein IT-Unternehmen gefragt wurde, und als er die Antwort geben scheiterte, gab den Interviewer diese Erklärung. Aber ich finde das dumm. Wie können Sie jemanden bitten, einen "Fehler" zu verwenden, als ob es sich um eine "Einrichtung" handelt, die von der Sprache bereitgestellt wird? Um es als "Facility" und "Technik" zu bezeichnen, ob wir 0 als Literal im zweiten Ausdruck übergeben oder eine Variable, deren Wert 0 ist, sollte das Ergebnis dasselbe gewesen sein.
Habe ich falsch zu dem Schluss, dass der Interviewer sehr dumm war, eine Frage so zu stellen und dass es seine Inkompetenz zeigt?
Dies ist ein interessanter Unterschied in Compilern, aber warum in der Welt würden Sie diese Art von 'for' Schleife in erster Linie verwenden? – JAB
Es sieht für Sie aus, dass Sie die Syntax für die "for" -Schleife in C völlig falsch verstanden haben? Du kannst nicht einfach erraten, wie man Dinge in einer Programmiersprache schreibt, du brauchst ein Buch oder einen Webkurs oder so etwas! –
@ ThomasPadron-McCarthy Eigentlich ist die Syntax in Ordnung. Es scheint keinen guten Nutzen zu haben, aber es ist vollkommen gültig, genauso wie der Satz "Meine Kälte ist ein Zeh" syntaktisch vollkommen gültig ist, aber ein Nonsense-Satz ist. Der erste Teil, printf ("\ nA") ', wird am Anfang der Schleife ausgeführt; Der Sentinel-Ausdruck, der bewirkt, dass die Schleife bei der Auswertung von false/0 nicht mehr ausgeführt wird, ist ein "a" für den ersten (was == 0) und ein Literal "0" für den zweiten; [Forts.] – JAB