elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Un if realmente se lee cuando la condición es falsa?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Un if realmente se lee cuando la condición es falsa?  (Leído 10,910 veces)
z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Un if realmente se lee cuando la condición es falsa?
« en: 28 Septiembre 2013, 21:12 pm »

Hola buenas, pues puede parecer una pregunta un poco lógica, pero realmente un if (de cualquier lenguaje de programación) es leído por el compilador de dicho lenguaje (aunque no se ejecute lo que contenga dentro) cuando su condición es falsa?

Un saludo.



Según he estado leyendo, el compilador, lee todo, y luego, va clasificando, y si un if es falso, se lo salta...

Ahora la pregunta, como la gente puede saber eso? Como es de fácil o difícil? :huh:

Puede que este tema venga a parecer un poco offtopic, pero bueno, realmente nunca se han cuestionado esto? >:D


« Última modificación: 28 Septiembre 2013, 21:27 pm por Ikillnukes » En línea


Interesados hablad por Discord.
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #1 en: 28 Septiembre 2013, 21:23 pm »

No he entendido bien la pregunta.
Código:
if(condicion == true) {
    // SE EJECUTA.
} else {
    // Si la condición es falsa.
}


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #2 en: 28 Septiembre 2013, 21:25 pm »

A ver, no es dentro del código, dentro del compilador, como dije:

Citar
el compilador, lee todo, y luego, va clasificando, y si un if es falso, se lo salta...

Me pregunto, como la gente llega a esas conclusiones, bueno, a no ser que sean los mismos programadores del compilador, entonces... Como pueden llegar a extraer dicha información y conclusiones? :huh:
En línea


Interesados hablad por Discord.
Juan.

Desconectado Desconectado

Mensajes: 85



Ver Perfil
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #3 en: 28 Septiembre 2013, 21:28 pm »

Depende del lenguaje, en C# y por ende VB no se evalua si el compilador puede deducir que es falsa, no solo con los if, las variables no inicializadas nunca llegan a reservarse memoria por poner otro ejemplo. En ese sentido es algo inteligente y predice lo que ocurrirá

Otros lenguajes no tienen esa capacidad
En línea

~

Desconectado Desconectado

Mensajes: 85


Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #4 en: 28 Septiembre 2013, 21:52 pm »

Si hablamos en tiempo de compilación, incluso compiladores antiguos como el de Turbo C++ (para DOS) tenían la capacidad de detectar cosas como si había variables que nunca se usaban o código que nunca se iba a ejecutar (si estaba despúes de un return y no había ningún goto hacia este).

La dificultad de hacer eso depende de la complejidad del problema y es una tarea mejor realizada por un proceso automático porque requiere llevar el control de las variables que nunca se modificaron y también de las porciones de código que quedaron fuera del flujo normal de ejecución en todos los casos.





Si hablamos en tiempo de ejecución, tenemos que recordar que los compiladores modernos aplican optimizaciones, y el código generado casi nunca refleja el código fuente original.

Pero en términos generales, tenemos que tener una idea de cómo corre el código de máquina o bytecode en cuanto a las decisiones condicionales.

Para un IF, se aplican un grupo de reglas de precedencia de paréntesis, y cómo actuar ante combinaciones de AND y OR lógicos.

Por ejemplo, si tenemos 5 variables con AND:

Código:
if(variable1 && variable2 && variable3 && variable4 && variable5)
{

}


El programa tiene que asegurarse de que ambas variables/condiciones/expresiones se cumplan. Si la primera, o segunda o tercera variable/condición/expresión no se cumple, entonces efectivamente llega hasta ahí y se salta comprobar el resto de expresiones. Un AND debe comprobar hasta el final, o saltarse el resto de la comprobación del IF sin ejecutar lo que contiene tan pronto como una condición no se cumpla.


Por ejemplo, si tenemos 5 variables con OR:

Código:
if(variable1 || variable2 || variable3 || variable4 || variable5)
{

}


En este caso, si la primera, o segunda variables se cumplen, entonces se salta el resto de la comprobación y ejecuta lo que contiene el IF. Con OR, lo que contiene el IF se ejecuta tan pronto como se cumple una condición, ejecuta lo que contiene, y se salta el resto de las expresiones del IF.

Con paréntesis y combinaciones de AND y OR esto se vuelve más complejo, pero es una cuestión de resolver paso a paso cada nivel de paréntesis en la secuencia correcta, y podemos ver para muchos casos qué partes de la expresión del IF se van a ejecutar y cuáles se van a saltar. Los casos en los que todas las expresiones de un IF se cumplen son una minoría.

También debemos recordar el comportamiento de las instrucciones, por ejemplo para procesadores x86, que sirven para saltos condicionales. Tenemos, entre otras, ja (mayor sin signo), jae (mayor o igual sin signo), jb (menor sin signo), jbe (menor o igual sin signo), je (igual), jne (no igual), además de usar jmp (salto incondicional) como útlimo recurso cuando todo el IF no se cumplió. Para OR, es más eficiente usar el caso de la instrucción directamente reflejada por la expresión lógica, y para AND, es más eficiente usar la operación de salto condicional opuesta al de la expresión en el código fuente.
En línea

Donar con PayPal para que siga trabajando:
https://www.ebay.com/usr/udocproject3

Streams en vivo de programación:
PC 1 - PC 2

http://www.youtube.com/@AltComp126/streams
z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #5 en: 28 Septiembre 2013, 22:15 pm »

Y tu donde has aprendido todo eso? :o
En línea


Interesados hablad por Discord.
$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #6 en: 28 Septiembre 2013, 23:39 pm »

Tu lo que quieres saber es aprender ingenieria inversa junto con lenguaje ensamblador para aprender como funciona un procesador, la memoria, ahi sabras como se ejecuta cada cosa.
En línea

BlackM4ster


Desconectado Desconectado

Mensajes: 499


Error, el teclado no funciona. Pulse F1 para continuar


Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #7 en: 30 Septiembre 2013, 08:25 am »

Hay varios tipos de compiladores. Los hay que leen el código entero, lo compilan, y luego ejecutan y los que van compilando y ejecutando linea a linea.

Algunos de linea a linea, nunca llegan a compilar ciertas cosas
En línea

- Pásate por mi web -
https://codeisc.com
z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #8 en: 30 Septiembre 2013, 15:34 pm »

Hay varios tipos de compiladores. Los hay que leen el código entero, lo compilan, y luego ejecutan y los que van compilando y ejecutando linea a linea.

Algunos de linea a linea, nunca llegan a compilar ciertas cosas

Y como se como funciona el mío? :P
En línea


Interesados hablad por Discord.
ABDERRAMAH


Desconectado Desconectado

Mensajes: 431


en ocasiones uso goto ¬¬


Ver Perfil WWW
Re: Un if realmente se lee cuando la condición es falsa?
« Respuesta #9 en: 1 Octubre 2013, 20:02 pm »

hay que ver los códigos generados por el compilador, normalmente necesitaras dominar ensamblador para leerlo. compilar linea a linea esta mal expresado, porque compilar, la misma palabra hace referencia a juntar todos los codigos maquina necesarios para crear el programa. Eso se llama interpretar, y en ese caso deberias debuguear el codigo mientras se ejecuta, y todo sera mas ilegible.
En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con php Condicion de session « 1 2 »
PHP
alexkof158 15 11,829 Último mensaje 27 Noviembre 2009, 22:10 pm
por [u]nsigned
Realmente tengo que usar clases cuando puedo simplemente usar Querys?
Java
Aikanáro Anário 3 3,454 Último mensaje 27 Noviembre 2011, 01:54 am
por sapito169
No me sale INNER JOIN con condición
Bases de Datos
javirk 3 3,133 Último mensaje 5 Abril 2012, 20:49 pm
por Runex
Duda_con condicion if
Java
Tuplado 3 2,263 Último mensaje 28 Diciembre 2012, 17:01 pm
por 1mpuls0
Duda en una condición con return « 1 2 »
Programación C/C++
Blaster 10 5,621 Último mensaje 28 Junio 2013, 12:40 pm
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines