Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

413
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 encuentra en 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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda