Despues de leer Funciones ocultas y rincones oscuros de C++/STL sobre comp.lang.c++.moderated
me sorprendió por completo que el siguiente fragmento se compilara y funcionara tanto en Visual Studio 2008 como en G++ 4.4.
Aquí está el código:
#include <stdio.h>
int main()
{
int x = 10;
while (x --> 0) // x goes to 0
{
printf("%d ", x);
}
}
Producción:
9 8 7 6 5 4 3 2 1 0
Supongo que esto es C, ya que también funciona en GCC. ¿Dónde se define esto en la norma y de dónde proviene?
O por algo completamente diferente… x
diapositivas a 0
.
while (x --\
\
\
\
> 0)
printf("%d ", x);
No tan matemático, pero… cada imagen vale más que mil palabras…
Es un operador muy complicado, así que incluso ISO/IEC JTC1 (Comité Técnico Conjunto 1) colocó su descripción en dos partes diferentes del estándar C++.
Bromas aparte, son dos operadores diferentes: --
y >
descritos respectivamente en §5.2.6/2 y §5.9 del estándar C++03.
es equivalente a
while (x-- > 0)
x--
(post decremento) es equivalente a x = x-1
entonces, el código se transforma en:
while(x > 0) {
x = x-1;
// logic
}
x--; // The post decrement done when x <= 0
Completamente geek, pero usaré esto:
#define as ;while
int main(int argc, char* argv[])
{
int n = atoi(argv[1]);
do printf("n is %d\n", n) as ( n --> 0);
return 0;
}