considere el siguiente código en C:necesita ayuda para entender este código de bucle en C
void main()
{
int a=0;
for(printf("\nA"); a; printf("\nB"));
printf("\nC");
printf("\nD");
}
Cuando compilo usando Turb C++ versión 3.0 y gcc-4.3.4, me sale el siguiente como la salida de los dos casos:
A
C
D
Sin embargo, si compilar el código siguiente:
void main()
{
for(printf("\nA"); 0; printf("\nB"));
printf("\nC");
printf("\nD");
}
la salida por gcc-4.3.4 es la misma que en el pre caso vious pero Turbo C++ 3.0 genera el siguiente resultado:
A
B
C
D
En primer lugar, no tengo ni idea de lo que está pasando aquí! Además, ¿cómo es que la salida del compilador gcc es la misma para ambos códigos, pero en el caso del compilador turboC++ 3.0, la salida es diferente? Por favor alguien puede arrojar algo de luz?
EDIT:
En realidad alguien se le preguntó esta pregunta en una entrevista para una empresa de TI y al no poder dar la respuesta, el entrevistador dio esta explicación. Pero creo que esto es estúpido. ¿Cómo puede pedirle a alguien que use un "error" como si fuera una "facilidad" proporcionada por el idioma? Para que se le llame "facilidad" y "técnica", ya sea que pasemos 0 como un literal en la segunda expresión o una variable cuyo valor es 0, el resultado debería haber sido el mismo.
¿Me equivoco al concluir que el entrevistador fue muy tonto al hacer una pregunta como esa y que muestra su incompetencia?
Esta es una diferencia interesante en los compiladores, pero ¿por qué en el mundo usarías ese tipo de bucle 'for' en primer lugar? – JAB
Me parece que has malentendido por completo la sintaxis del ciclo "for" en C? ¡No puedes adivinar cómo escribir cosas en un lenguaje de programación, necesitas un libro o un curso web o algo así! –
@ ThomasPadron-McCarthy En realidad, la sintaxis está bien. No parece tener un buen uso, pero es perfectamente válido, al igual que la frase "Mi frío es un dedo del pie" es perfectamente válida sintácticamente, pero es una frase sin sentido. La primera parte, 'printf (" \ nA ")', se ejecutará al comienzo del bucle; la expresión centinela, que hace que el ciclo deje de ejecutarse cuando se evalúa como falso/0, es un 'a' para el primero (que == 0) y un' 0' literal para el segundo; [cont.] – JAB