Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

341
Vistas
¿Por qué tener i++; I--; uno detrás del otro?

Estaba mirando el código fuente de nmap que se lanzó en 1997 y noté esta sección de código que me parece un poco extraña:

 int i=0, j=0,start,end; char *expr = strdup(origexpr); ports = safe_malloc(65536 * sizeof(short)); i++; /* <<<<<< */ i--; /* <<<<<< */ for(;j < exlen; j++) if (expr[j] != ' ') expr[i++] = expr[j]; expr[i] = '\0';

¿Por qué tendrías i++; y luego i--; uno detrás del otro? i es 0 , entonces i++ convierte i en 1 . Después de eso, i-- convierte i en 0 .

Enlace al código fuente original. Buscar:

 i++; i--;

¿Alguien puede explicar para qué sirve esto?

over 4 years ago · Santiago Trujillo
4 Respuestas
Responde la pregunta

0

Esto fue un error. Estas líneas juntas dan como resultado que i no cambie, por lo que no deberían haber estado allí.

El artículo vinculado que introdujo nmap se publicó el 1 de septiembre de 1997. Si observa el repositorio SVN para nmap en https://svn.nmap.org/nmap , la revisión inicial registrada el 10 de febrero de 1998 no tiene esas líneas:

 int i=0, j=0,start,end; char *expr = strdup(origexpr); char *mem = expr; ports = safe_malloc(65536 * sizeof(short)); for(;j < exlen; j++) if (expr[j] != ' ') expr[i++] = expr[j]; expr[i] = '\0';

Así que esto es algo que el autor encontró y arregló entre la publicación del código fuente inicial de nmap y el registro inicial en SVN.

over 4 years ago · Santiago Trujillo Denunciar

0

Es inutil. No hace absolutamente nada.

Si tuviera que especular, probablemente sean los restos de algún código de depuración que se usó durante el desarrollo.

Supongo que uno de i++ o i-- se introdujo en un cambio y el otro se introdujo en otro.

Sin embargo, no tengo forma de encontrar el punto de introducción, porque no hubo un historial de revisión entre el lanzamiento de la fuente inicial y la primera revisión de SVN.

over 4 years ago · Santiago Trujillo Denunciar

0

Para un compilador que no optimiza, o uno que reconoce los efectos secundarios del hardware, i++; i: la secuencia haría que i se leyera de la memoria y luego se reescribiera, independientemente de la ruta tomada a través del bucle for y si anidada.

En el procesamiento paralelo, a veces se realizan modificaciones del compilador para garantizar que una secuencia de código utilice sus propias copias locales de variables en lugar de copias globales.

Dado que el ejemplo es un fragmento de código, no se puede determinar el compilador utilizado, el sistema operativo/hardware esperado, ni si se trata de una secuencia de código/función que se puede ejecutar como un subproceso independiente.

En sistemas más simples, forcé temporalmente cambios en las variables para ejercer la función de captura en un entorno de depuración. Si ese fuera el caso, el autor puede haber olvidado eliminar el código cuando se completó el desarrollo.

over 4 years ago · Santiago Trujillo Denunciar

0

Le sugiero que verifique solo el código actualizado. Si usa (i = 2+1) justo después de eso (i-1) eso no tiene sentido. El valor de i permanece sin cambios. Puedes probarlo usando cualquier compilador c o c++. o incluso en cualquier otro idioma es lo mismo. Ejecute el código en el compilador.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda