¿Qué es el operador “–>” en C/C++?

2 minutos de lectura

Despues de leer Funciones ocultas y rincones oscuros de C++/STL sobre comp.lang.c++.moderatedme 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…

  • error: se requiere lvalue como operando de decremento

    – Roland Illig

    24 de enero a las 17:21

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;
}

  • Sé que se ve genial, pero me temo que es engañoso. La razón por la que está escribiendo C ++ en lugar de lenguaje de máquina es porque desea transmitir su intención al próximo tipo que lea su código. Esta construcción viola el principio de menor sorpresa. Es un “peligro de tropiezo” mental.

    – StevePoling

    7 de marzo de 2021 a las 19:43

  • Vocación atoi hace que el código huela inmediatamente.

    – Roland Illig

    24 de enero a las 17:24

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad