Programación General > C/C++
Uso De Strcmp
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
[*] Página Anterior
Ir a la versión completa