if es una comparación que espera un valor logico
binario 0/1 entonces
IF (!i) "Si es 0 entonces es 1 " (la table de verdad del NOT)
NULL es 0.
Citarbinario 0/1 entoncesAhi si ya no, porque si fuera asi el if reventaria al enviarle cualquier valor diferente de 1 o 0 y como ya lo mencione te compara 0, NULL o diferente de NULL.CitarIF (!i) "Si es 0 entonces es 1 " (la table de verdad del NOT) Casi... pero no solo negar 0 es 1, negar NULL también es 1.
Pero tengo entendido que NULL es una constante definida independientemente en cada implementación de compilador así que puede o no ser un puntero a la posición 0 del stack no es así?
las comparaciones LOGICAS son falso o verdadero (0/1) entonces al resolver el if es 0 o 1entonces no entiendo porque dices que reventaria al enviar otro valor
el if es una comparación que espera un valor lógicobinario 0/1
Finalmente lo que evalua el if es si la condicion es verdadera o no (1/0) entonces el if siempre espera 1/0
if (x) <---- el if estaria recibiendo la condicion ya 'resuelta' equivalente aif (i==0)asi que no entiendo porque dices que no
¿Como pensas que definen una constante a la pila que es variable y asignada en tiempo de ejecución por el S.O.?NULL es 0 ...
Decir que #define NULL 0 Es decir que apunta a la dirección 0... que desde luego es la dirección del comienzo del segmento de datos... del stack.La mayoria, si es que no la totalidad de los compiladores, asignan 0 a NULL,, pero no es obligación que lo hagan asi, es libre de la implementación del compilador determinar a donde lo dejan apuntando y que dirección tomar como nula.
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 falsay if (i==0)--> se resuelve como cierta
Cita de: "JuanK" Decir que #define NULL 0 Es decir que apunta a la dirección 0... que desde luego es la dirección del comienzo del segmento de datos... del stack.La mayoria, si es que no la totalidad de los compiladores, asignan 0 a NULL,, pero no es obligación que lo hagan asi, es libre de la implementación del compilador determinar a donde lo dejan apuntando y que dirección tomar como nula. No, el preprocesador se encarga de reemplazar la palabra NULL por 0. Nadie en su sano juicio usaria un compilador que no definiera NULL como 0 ...
Ni idea, no debería ser algo opcional sino estándar.Y compiladores.. que se yo, hay mucho linuxero desocupado con ganas de parecer un hippie diferente y en una de esas hacen uno y por ser gratis pega...
El preprocesador es del compilador.
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 falsay if (i==0)--> se resuelve como ciertaEl que esta confundiendo las cosas eres tuif compara falso/verdadero, 0/1, encendido/apagado, nel/simon es una logico boleanopor cierto strcmp no devuelve null lo que puse fuex=(i==0) //=1if (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 IFTambien tengo entendido que NULL es 0 el if no revienta
Cita de: "JuanK" El preprocesador es del compilador. 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.