Programación General > C/C++

 Uso De Strcmp

<< < (4/4)

Eternal Idol:

--- Cita de: "JuanK" --- El preprocesador es del compilador.
--- Fin de la cita ---
Yo no dije lo contrario dije no a esto:

"Es decir que apunta a la dirección 0... que desde luego es la dirección del comienzo del segmento de datos... del stack."

NULL no apunta a ningun lado. Si podemos darle el valor de NULL a un puntero, que seria el que apuntara a 0.

¿Es la direccion del comienzo de datos? ¿Si? ¿Entonces para que declaramos siempre los punteros a cero? ¿Para sobreescribir la memoria? NO. Los datos comienzan donde el S.O. lo diga igual que la pila y si escribimos en 0 siempre da una excepcion ya que nunca nos da el S.O. esa direccion.

JuanK:

--- Cita de: "F_Tanori" ---
--- Cita de: "JuanK" ---No, porque nadie te puede asegurar que x realmente no sea 0 sino NULL.


Por otro lado el ejemplo esta mal, no solo por el uso de i en un lado y de x en otro, sino que

en el caso que x sea 0:

if (x)  --> se resuelve como falsa

y

if (i==0)--> se resuelve como cierta
--- Fin de la cita ---
El que esta confundiendo las cosas eres tu

if compara falso/verdadero, 0/1, encendido/apagado, nel/simon es una logico boleano
por cierto strcmp no devuelve null :P


lo que puse fue


x=(i==0) //=1

if (x) <---- el if estaria recibiendo la condicion ya 'resuelta'
if (i==0)

y es lo MISMO  porque previamente le asignaste el resultado LOGICO de i==0 a x en lugar de pasarselo al IF

Tambien tengo entendido que NULL es 0 el if no revienta :P

 :hola:
--- Fin de la cita ---
no creo estar confundido, normalmente el if evalúa falso o verdadero eso es cierto mirándolo a nivel logico, según tu solo 1 o 0 pero no es cierto de hecho, y eso si me corregiría eternal idol, el compilador en esos caso de comparación de igualdad resolvería ese if con una instrucción de TEST equivalente en opcode , que lo único que miraría seria revisar si un registro tiene un valor en 0 o diferente de 0.

De resto creo que ya te confundiste incluso con lo que yo dije. Aunque estamos haciendo una avalancha con una sola bola de nieve.

Eternal Idol:
Obviamente el if permite usar muchos mas valores que 0b y 1b como dice JuanK, lo que si es 0b o 1b es su resultado ... los ifs suelen ser "traducidos" a cmp's.

JuanK:

--- Cita de: "Eternal Idol" ---
--- Cita de: "JuanK" --- El preprocesador es del compilador.
--- Fin de la cita ---
Yo no dije lo contrario dije no a esto:

"Es decir que apunta a la dirección 0... que desde luego es la dirección del comienzo del segmento de datos... del stack."

NULL no apunta a ningun lado. Si podemos darle el valor de NULL a un puntero, que seria el que apuntara a 0.

¿Es la direccion del comienzo de datos? ¿Si? ¿Entonces para que declaramos siempre los punteros a cero? ¿Para sobreescribir la memoria? NO. Los datos comienzan donde el S.O. lo diga igual que la pila y si escribimos en 0 siempre da una excepcion ya que nunca nos da el S.O. esa direccion.
--- Fin de la cita ---
Considera, como creí que lo harías, que la dirección 0 del segmento de datos es la dirección 0 offset a partir de la dirección que el OS destine para cargar ese stack.

JuanK:
Conclusiones:

1- Si bien NULL puede o no ser igual 0, lo mas seguro es que  nunca exista un compilador que le asigne diferente 0. El 100% de las implementaciones mas populares actualmente lo hacen así.

2- Si bien los if pueden recibir cualquier valor, al final la condición muy probablemente se evaluara con cmp buscando igualdad o desigualdad con 1 o con 0.

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa