SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: supermancito en Martes 5 de Diciembre de 2006, 17:14

Título: Diferenciaa
Publicado por: supermancito en Martes 5 de Diciembre de 2006, 17:14
saludos amigos una duda

cual es la diferencia :
Citar
libro **bib=NULL;libro **aux=NULL;


con esto:
Citar
libro.open("Socios.bin",ios::out|ios::binary);

ay alguna diferncia entre esos 2  codigos o son iguales??
Título: Re: Diferenciaa
Publicado por: NiCH en Martes 5 de Diciembre de 2006, 17:45
La pregunta sería: ¿Hay algún parecido? Xq yo no le encuentro ninguno. Salu2
Título: Re: Diferenciaa
Publicado por: RadicalEd en Martes 5 de Diciembre de 2006, 18:04
Cita de: "supermancito"
saludos amigos una duda

cual es la diferencia :
Citar
libro **bib=NULL;libro **aux=NULL;


con esto:
Citar
libro.open("Socios.bin",ios::out|ios::binary);

ay alguna diferncia entre esos 2  codigos o son iguales??
Con la primera estas creando punteros de tipo libro (debe ser una clase o algo así o estructura no se, corrijanmen si estoy mal pero creo que a un puntero no se le puede asignar un valor NULL :blink: )

La segunda es una función de la clase libro que abre un archivo.
Título: Re: Diferenciaa
Publicado por: Mollense en Martes 5 de Diciembre de 2006, 18:06
Ayudalo Señor.

¿Que pasa Supermancito?

¿Ya te leíste algún libro?, Deberías
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 18:24
Cita de: "supermancito"
cual es la diferencia
Este es uno de los mensajes mas graciosos que lei eh ...
Título: Re: Diferenciaa
Publicado por: NiCH en Martes 5 de Diciembre de 2006, 19:13
RadicalEd a un puntero le puedes dar un valor NULL, de hecho es una forma de inicializarlo (siempre se recomienda inicializarlos), aunque más estándar por lo que he leído en bastantes libros es inicializarlo a 0.

Un poco de offtopic para darle sentido a este hilo.

Salu2
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 20:12
NULL es 0 y efectivamente es una buena practica de programacion inicializar las variables asi.
Título: Re: Diferenciaa
Publicado por: arielb en Martes 5 de Diciembre de 2006, 20:20
Citar
Ayudalo Señor.

jejeje me reido
Título: Re: Diferenciaa
Publicado por: RadicalEd en Martes 5 de Diciembre de 2006, 20:43
Cita de: "Eternal Idol"
NULL es 0 y efectivamente es una buena practica de programacion inicializar las variables asi.
Sip, ahora me acuerdo de esa discusión tormentosa del otro día :P
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 21:06
Cita de: "Eternal Idol"
NULL es 0 y efectivamente es una buena practica de programacion inicializar las variables asi.
No necesariamente... pero si es así en todos los casos que conozco... :whistling:
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 21:23
Cita de: "JuanK"
No necesariamente... pero si es así en todos los casos que conozco... :whistling:
NULL es 0 hasta que se demuestre lo contrario  :kicking:
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 21:29
Quedo demostrado que NULL es 0 en casi todos o todos los compiladores actuales, pero también quedo claro que null puede ser cualquier cosa de acuerdo a ANSI C.

http://foros.solocodigo.com/index.php?show...c=25551&hl=null (http://foros.solocodigo.com/index.php?showtopic=25551&hl=null)


Citar
Macro NULL ANSI C

#define NULL

Un puntero nulo constante definido según la implementación.
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 21:46
Cita de: "Eternal Idol"
No es casi todos, eso es mentira mientras no muestres NINGUN compilador que defina NULL como algo diferente a cero. Por eso mantengo que NULL es 0 hasta que demuestres lo contrario; y es mas, NULL es 0, si a algun imbecil se le ocurre ponerle otro valor que lo haga, seguira siendo 0 para cualquiera. Por algo es NULL!

Mas información, dudas o aclaraciones... ir a la fuente:

ANSI C[/size]
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 21:47
Cita de: "JuanK"
Quedo demostrado que NULL es 0 en casi todos o todos los compiladores actuales, pero también quedo claro que null puede ser cualquier cosa de acuerdo a ANSI C.
No es casi todos, eso es mentira mientras no muestres NINGUN compilador que defina NULL como algo diferente a cero. Por eso mantengo que NULL es 0 hasta que demuestres lo contrario; y es mas, NULL es 0, si a algun imbecil se le ocurre ponerle otro valor que lo haga, seguira siendo 0 para cualquiera. Por algo es NULL!

http://encarta.msn.com/dictionary_/null.html (http://encarta.msn.com/dictionary_/null.html)

Y en castellano (tiene la misma raiz, nullus)

nulo, la.
   (Del lat. nullus).
   1. adj. Falto de valor y fuerza para obligar o tener efecto, por ser contrario a las leyes, o por carecer de las solemnidades que se requieren en la sustancia o en el modo.
   2. adj. Incapaz, física o moralmente, para algo.
   3. adj. ninguno (ǁ ni uno solo).
   4. adj. Dicho de un combate de boxeo: Sin vencedor, por haber conseguido ambos púgiles igual número de puntos.
   5. adj. Mat. Que tiene valor igual a cero.

No pienso continuar, si queres creer que podes encontrar un compilador que defina NULL a algo diferente a cero, muy bien, segui pensando eso.
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 21:49
Cita de: "Eternal Idol"
http://encarta.msn.com/dictionary_/null.html (http://encarta.msn.com/dictionary_/null.html)
 
la definición de microsoft no implica standart .
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 21:55
Cita de: "JuanK"
la definición de microsoft no implica standart .
¿Standart? Es standard, por favor. Esa no es una definicion de Microsoft, es un diccionario de la lengua no de informatica.

Ademas el standard de C++ dice esto claramente:

4.10 - Pointer conversions [conv.ptr]

-1- A null pointer constant is an integral constant expression (expr.const) rvalue of integer type that evaluates to zero.
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 22:00
Más info: ;)


http://c-faq.com/null/ (http://c-faq.com/null/)

Citar
5. Null Pointer Constants


http://www.greenend.org.uk/rjk/2001/02/cfu.html (http://www.greenend.org.uk/rjk/2001/02/cfu.html)
Citar
5.6 If NULL were defined as follows:

   #define NULL ((char *)0)

wouldn't that make function calls which pass an uncast NULL work?
Título: Re: Diferenciaa
Publicado por: su - en Martes 5 de Diciembre de 2006, 22:03
null: zero - data link sink

No es solo en este tema, al igual que en definicion, en Unix existe /dev/null y /dev/zero (no viene al caso pero... )

Es mas yo he visto esto

Código: Text
  1. #define NULL ((char *)0)
  2.  
Código: Text
  1. #define NULL ((void *)0)
  2.  

No se como funciones...
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 22:03
¿No entendes ingles no?

http://gcc.gnu.org/ml/gcc/1999-03n/msg00111.html (http://gcc.gnu.org/ml/gcc/1999-03n/msg00111.html)


"No. The C++ Standard does not say anything like that. The exact
wording is:

18.1/4
---
  The macro NULL is an implementation-defined C++ null pointer
  constant in this Internnational Standard (4.10).
---

Footnote says:

---
  Possible definitions include 0 and OL, but not (void*)0.
---"

Puntero nulo, nulo!!! Implica cero!!!
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 22:05
Esto es de tu pagina http://www.greenend.org.uk/rjk/2001/02/cfu.html: (http://www.greenend.org.uk/rjk/2001/02/cfu.html:)

The standard says:
An integral constant expression with the value 0, or such an expression cast to void *, is called a null pointer constant. If a null pointer constant is assigned to or compared for equality to a pointer, the constant is converted to a pointer of that type. Such a pointer, called a null pointer, is guaranteed to compared unequal to a pointer to any object or function.

Se ve que no entendes ingles muy bien que digamos.
Título: Re: Diferenciaa
Publicado por: su - en Martes 5 de Diciembre de 2006, 22:17
Citar
En general, un puntero se puede iniciar como calquier otra variable, aunque los unicos valores significativos son NULL o la direccion de un objeto previamente definido. NULL es una constant definida en el fichero stdio.h asi:

#defined NULL ((void *)0) // definicion de NULL en c
#defined NULL 0                // definicion de NULL en C++

El lenguaje C garantiza que un puntero que apunte a un objeto valido nunca tendra un valor cero.
El valor cero se utiliza oara indicar que ha ocurrido un error; en otras palabras, que una determinada operacion no se ha podido realizar. Por ejemplo, recuerde que la funcion gets cuando lee la marca de fin de fichero retrna un puntero nulo (NULL), indicando asi que no ha mas datos para leer.

En general, no tiene sentido asignar enteros a punteros porque quien gestiona la memoria es el sistema operativo y por lo tanto es el, el que sabe en todo momento que direcciones estan libres y cuales estan ocupadas...

C/C++ Curso de prgamacion 2ª edicion.
Fco. Javier Ceballos.

Uds. diran...  :blink:
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 22:19
no...solo pones lo que te conviene... los textos ( si sabes ingles...) muestran las implicaciones de hablar de NULL como si siempre fuera = 0 , lo cual desde luego se debe a que la gente suele asumir que NULL es necesariamente 0 pero no siempre funciona asi y no es necesario que lo sea... otra cosa es que se haya vuelto estándar de facto.
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 22:20
Cita de: "su -"
Citar
En general, un puntero se puede iniciar como calquier otra variable, aunque los unicos valores significativos son NULL o la direccion de un objeto previamente definido. NULL es una constant definida en el fichero stdio.h asi:

#defined NULL ((void *)0) // definicion de NULL en c
#defined NULL 0                // definicion de NULL en C++

El lenguaje C garantiza que un puntero que apunte a un objeto valido nunca tendra un valor cero.
El valor cero se utiliza oara indicar que ha ocurrido un error; en otras palabras, que una determinada operacion no se ha podido realizar. Por ejemplo, recuerde que la funcion gets cuando lee la marca de fin de fichero retrna un puntero nulo (NULL), indicando asi que no ha mas datos para leer.

En general, no tiene sentido asignar enteros a punteros porque quien gestiona la memoria es el sistema operativo y por lo tanto es el, el que sabe en todo momento que direcciones estan libres y cuales estan ocupadas...

C/C++ Curso de prgamacion 2ª edicion.
Fco. Javier Ceballos.

Uds. diran...  :blink:
C con clase:

Citar
Macro NULL ANSI C

#define NULL

Un puntero nulo constante definido según la implementación.

Ejemplo:

#define NULL 0  DJGPP
#define NULL 0
ó
#define NULL 0L
ó
#define NULL ((void *)0)  Borland
#define NULL ((void*0) /* Para C++ */  Dev-C++
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 22:20
NO, como no sabes ingles no entendes de que hablan, hablan de los problemas con los castings! No con que el valor sea diferente de cero, en todos lados habla clarisimamente de null, que es nulo y que es cero! Por dios, que manera de hacer perder el tiempo y confundir innecesariamente a la gente.
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 22:22
Cita de: "Eternal Idol"
No pienso continuar
...
Por dios, que manera de hacer perder el tiempo y confundir innecesariamente a la gente.
Yo no hago perder el tiempo... cada cual pierde el tiempo como quiere  <_<
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 22:23
Cita de: "JuanK"
C con clase:

Citar
Macro NULL ANSI C

#define NULL

Un puntero nulo constante definido según la implementación.

Ejemplo:

#define NULL 0  DJGPP
#define NULL 0
ó
#define NULL 0L
ó
#define NULL ((void *)0)  Borland
#define NULL ((void*0) /* Para C++ */  Dev-C++
No es un standard de facto para nada, estas confundido y confundiendo innecesariamente.

Como ves y pones, la diferencia son castings diferentes, todos tiene VALOR 0 y eso si esta en el standard especificado claramente.

"An integral constant expression with the value 0, or such an expression cast to void *, is called a null pointer constant. "

"-1- A null pointer constant is an integral constant expression (expr.const) rvalue of integer type that evaluates to zero"

Ademas es NULL ... NULL!!
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 22:24
Cita de: "JuanK"
Yo no hago perder el tiempo... cada cual pierde el tiempo como quiere  <_<
Si lo haces, no tenes ni la menor idea de lo que hablas y mantenes una posicion ridicula. Esta clarisimo que el valor de NULL es 0, lo dice el standard y hay citas hasta de las paginas que vos trajiste a este hilo. No ves que la diferencia es el casting, muy bien, es tu problema. NULL es 0, siempre, no hay duda, no es un standard de facto es lo que viene en el standard, su valor es 0 si o si.
Título: Re: Diferenciaa
Publicado por: F_Tanori en Martes 5 de Diciembre de 2006, 22:26
en español la palabra es  Estándar :P


yo tengo una duda  :ph34r:


A veces null es 0 pero a veces no por ejemplo


Apuntar un puntero (valga la 'rebusnancia'  :ph34r: ) a NULL seria enviarlo al inicio?




o por ejemplo en un arreglo puedo hacer esto?

numeros[5]={1,2,3,4,5}; //Que tal ahora :P

printf ("Numero en la posicion 0 es: %d ",numeros[NULL]);

Citar
Numero en la posicion 0 es: 1


?????  :ph34r:


es una duda   camaradas :beer:
saludos
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 22:30
Cita de: "F_Tanori"
en español la palabra es  Estándar :P

Efectivamente:

estándar.
 (Del ingl. standard).

Cita de: "F_Tanori"
A veces null es 0 pero a veces no por ejemplo

No, NULL siempre tiene como valor 0, y si el puntero tiene valor 0 y si accedes genera una excepcion por leer/escribir en esa direccion.
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 22:32
OK,


Ni siquiera compilaría en VC++

Código: Text
  1. numeros[5]={1,2,3,4,5,6};
  2.  
  3. printf (&#34;Numero en la posicion 0 es:&#34;,numeros[NULL]);
  4.  

Citar
Error   1   error C2107: illegal index, indirection not allowed   
Título: Re: Diferenciaa
Publicado por: RadicalEd en Martes 5 de Diciembre de 2006, 22:34
Cita de: "F_Tanori"
o por ejemplo en un arreglo puedo hacer esto?

numeros[5]={1,2,3,4,5,6};

printf ("Numero en la posicion 0 es:",numeros[NULL]);

Citar
Numero en la posicion 0 es: 1
Buen ejemplo F_Tanori, yo soy el menos indicado para opinar y solo lo voy a hacer a manera lo poco que he entendido.

Siguiendo con lo de que un desocupado hiciera apuntar a NULL a otra dirección en este caso '5', 'tons numeros[NULL] sería igual a '6'

Entonces deduciendo por parte y parte tienen razón.
 :lightsabre:  :lightsabre:  :lightsabre:
NO NO ME PEGUEN NO ME PEGUEN
 :ouch:  :ouch:  :ouch:

NULL actualmente es y sera '0', pero si alguién lo cambia puede apuntar donde quiera.
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 22:34
Mentira, haciendolo bien tenes tu 1 en pantalla:

Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3.  
  4. void main()
  5. {
  6.   int numeros[]={1,2,3,4,5,6};
  7.   printf (&#34;Numero en la posicion 0 es: %d&#34;,numeros[NULL]);  
  8. }
  9.  
  10.  
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 22:35
Cita de: "RadicalEd"
NULL actualmente es y sera '0', pero si alguién lo cambia puede apuntar donde quiera.
Si, puede ser cambiado PERO y es un gran pero, quebrarias el standard.
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 22:39
Cita de: "Eternal Idol"
Mentira, haciendolo bien tenes tu 1 en pantalla:

Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3.  
  4. void main()
  5. {
  6.   int numeros[]={1,2,3,4,5,6};
  7.   printf (&#34;Numero en la posicion 0 es: %d&#34;,numeros[NULL]);  
  8. }
  9.  
  10.  
MENTIRA!!!!

tal como esta mostrado no compila.

Código: Text
  1. int numeros[5]={1,2,3,4,5,6};
  2. printf (&#34;Numero en la posicion 0 es:&#34;,numeros[NULL]);
  3.  


primero que todo porque el arreglo es de 5 y esta llenado con 6... :whistling:

Y segundo aun si se soluciona eso bota el error que dije.
Título: Re: Diferenciaa
Publicado por: RadicalEd en Martes 5 de Diciembre de 2006, 22:41
Cita de: "Eternal Idol"
Cita de: "RadicalEd"
NULL actualmente es y sera '0', pero si alguién lo cambia puede apuntar donde quiera.
Si, puede ser cambiado PERO y es un gran pero, quebrarias el standard.
sip, eso si.

Mira estos errores:
Citar
pointer.c: En la función `main':
pointer.c:5: error: array subscript is not an integer
[/color]
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 22:43
Cita de: "JuanK"
MENTIRA!!!!

tal como esta mostrado no compila.

primero que todo porque el arreglo es de 5 y esta llenado con 6... :whistling:

Y segundo aun si se soluciona eso bota el error que dije.
Que manera de hablar al pedo, por supuesto que no compila si pones mal el tamaño del array! Si hubieras visto mi codigo te darias cuenta de que eso esta solucionado aunque claro tenes que decir que lo hiciste vos ...

Con cl archivo.cpp compila perfectamente.
Título: Re: Diferenciaa
Publicado por: F_Tanori en Martes 5 de Diciembre de 2006, 22:43
Entonces ....???? :ph34r:

Yo creo que es un espacio reservado que tal vez al convertirlo a entero se hace 0

es como pasar "" (vacio) a entero da cero  o no? <_<

 esto basado en mi experiencia (mucho menor a los de muchos aqui  :smartass:  ) y todo en un contexto de duda :ph34r:


Se ponen sabrosas estas discuciones :P, en buen plan porque salimos de la ignoracia



 :smartass:  :comp:
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 22:45
Cita de: "RadicalEd"
Mira estos errores:
Citar
pointer.c: En la función `main':
pointer.c:5: error: array subscript is not an integer
Logicamente puede no funcionar al poder estar definido como un puntero, eso es lo que dice CLARAMENTE el standard que es definido por el compilador.
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 22:46
Cita de: "Eternal Idol"
Con cl archivo.cpp compila perfectamente.
claro porque al cambiarle la extencion ya no estamos hablando de C, sino de C++.

Esto es compilándolo como código de C:

Citar
C:\Documents and Settings\jruiz\Escritorio>cl code.c
Microsoft ® 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright © Microsoft Corporation.  All rights reserved.

code.c
code.c(6) : error C2107: illegal index, indirection not allowed

C:\Documents and Settings\jruiz\Escritorio>
Título: Re: Diferenciaa
Publicado por: F_Tanori en Martes 5 de Diciembre de 2006, 22:47
Cita de: "JuanK"
Cita de: "Eternal Idol"
Mentira, haciendolo bien tenes tu 1 en pantalla:

Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3.  
  4. void main()
  5. {
  6.   int numeros[]={1,2,3,4,5,6};
  7.   printf (&#34;Numero en la posicion 0 es: %d&#34;,numeros[NULL]);  
  8. }
  9.  
  10.  
MENTIRA!!!!

tal como esta mostrado no compila.

Código: Text
  1. int numeros[5]={1,2,3,4,5,6};
  2. printf (&#34;Numero en la posicion 0 es:&#34;,numeros[NULL]);
  3.  


primero que todo porque el arreglo es de 5 y esta llenado con 6... :whistling:

Y segundo aun si se soluciona eso bota el error que dije.
no respete la sintaxis, es mas yo casi ni uso C :P, era un ejemplo pense que se entendia a que me referia :P


me equivoque con lo del arreglo pero ya saben a lo que me referia :P


( si NULL=0 el motivo de esta charla)


 :whistling:
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 22:49
Cita de: "JuanK"
claro porque al cambiarle la extencion ya no estamos hablando de C, sino de C++.
 
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3.  
  4. void main()
  5. {
  6.   int numeros[6]={1,2,3,4,5,6};
  7.   printf (&#34;Numero en la posicion 0 es: %d&#34;,numeros[(int)NULL]);  
  8. }
  9.  
  10.  

Castings, si, lo que puede definir el compilador a su gusto.
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 22:50
en ningún lado de ANSI C dice que solo los castings.  :whistling:
Título: Re: Diferenciaa
Publicado por: F_Tanori en Martes 5 de Diciembre de 2006, 22:51
Cita de: "F_Tanori"
Entonces ....???? :ph34r:

...Yo creo que es un espacio reservado que tal vez al convertirlo a entero se hace 0

es como pasar "" (vacio) a entero da cero ...

 :smartass:  :comp:


 :rolleyes:
Título: Re: Diferenciaa
Publicado por: RadicalEd en Martes 5 de Diciembre de 2006, 22:51
Cita de: "JuanK"
Cita de: "Eternal Idol"
Con cl archivo.cpp compila perfectamente.
claro porque al cambiarle la extencion ya no estamos hablando de C, sino de C++.

Esto es compilándolo como código de C:

Citar
C:\Documents and Settings\jruiz\Escritorio>cl code.c
Microsoft ® 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright © Microsoft Corporation.  All rights reserved.

code.c
code.c(6) : error C2107: illegal index, indirection not allowed

C:\Documents and Settings\jruiz\Escritorio>
Sin embargo
Citar
pointer.cpp: En function `int main()':
pointer.cpp:5: aviso: converting NULL to non-pointer type
[/color]
Título: Re: Diferenciaa
Publicado por: su - en Martes 5 de Diciembre de 2006, 22:54
Wow, ahora hay que reeler lo que cite....

Código: Text
  1. #include &#60;stdio.h&#62;
  2.  
  3. main()
  4. {
  5.  int numeros[]= { 1, 2, 3, 4, 5, 6 };
  6.  Ver(numeros, 5);
  7.  int i = 0;
  8.   printf(&#34;NULL: %d &#34;, numeros[NULL]);
  9.   printf(&#34;Con i: %d &#34;, numeros[i]);
  10. }
  11.  
  12.  

Ahora, yo no se de C/C++ asi que como dice Radical, no me peguen
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 22:55
Cita de: "JuanK"
en ningún lado de ANSI C dice que solo los castings.  :whistling:
Sos un NECIO, el valor es 0 asi que ya nos contaras que es lo que les permiten definir:

Esto es de tu pagina http://www.greenend.org.uk/rjk/2001/02/cfu.html: (http://www.greenend.org.uk/rjk/2001/02/cfu.html:)

The standard says:
An integral constant expression with the value 0, or such an expression cast to void *, is called a null pointer constant. If a null pointer constant is assigned to or compared for equality to a pointer, the constant is converted to a pointer of that type. Such a pointer, called a null pointer, is guaranteed to compared unequal to a pointer to any object or function.

#define NULL 10-10 es valido tambien.
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 22:59
Cita de: "su -"
Ahora, yo no se de C/C++ asi que como dice Radical, no me peguen
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3.  
  4. void main()
  5. {
  6.   int numeros[]= { 1, 2, 3, 4, 5, 6 };
  7.   int i = 0;
  8.  printf(&#34;NULL: %d &#34;, numeros[(int)NULL]);
  9.  printf(&#34;Con i: %d &#34;, numeros[i]);
  10. }
  11.  
  12.  

Asi da compilado en C y C++: "NULL: 1 Con i: 1"
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 23:00
yo solo digo unas cosas:

1- yo uso null como si fuera 0, siempre

2- el hecho de que yo y la mayoria o la totalidad lo use asi no implica que sea lo absolutamente cierto cierto... me gusta sembrar controversia para ponernos a pensar, porque para mi ese rollo no esta claro por ANSI C, ni por ningún lado.
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 23:02
Cita de: "JuanK"
yo solo digo unas cosas:

1- yo uso null como si fuera 0, siempre

2- el hecho de que yo y la mayoria o la totalidad lo use asi no implica que sea lo absolutamente cierto cierto... me gusta sembrar controversia para ponernos a pensar, porque para mi ese rollo no esta claro por ANSI C, ni por ningún lado.
Decis muchas cosas, lamentablemente soles hablar de cosas que no sabes o no logras comprender. En este caso como lo vas a tener claro si no sabes ingles ...

En el otro hilo te segui la corriente ya que la verdad no me habia tomado la molestia de leer lo suficiente y pense que tal vez estabas acertado pero la verdad es que no, no hay forma de definir NULL a un valor diferente a 0 sin romper el standard.
Título: Re: Diferenciaa
Publicado por: F_Tanori en Martes 5 de Diciembre de 2006, 23:04
Cita de: "JuanK"
yo solo digo unas cosas:

1- yo uso null como si fuera 0, siempre

2- el hecho de que yo y la mayoria o la totalidad lo use asi no implica que sea lo absolutamente cierto cierto... me gusta sembrar controversia para ponernos a pensar, porque para mi ese rollo no esta claro por ANSI C, ni por ningún lado.


osea no llegamos a nada  :unsure:


y el hilo se va cerrar  :o   :P


hagamos como ms sin estandares :devil:

o entonces se queda

NULL es 0 un espacio definido por el compilador que puede ser modificado por el programador para apuntar hacia donde le pege la gana, aunque eso es 'romper' el estandar pero es posible hacer que null no sea 0

 :smartass:
Título: Re: Diferenciaa
Publicado por: su - en Martes 5 de Diciembre de 2006, 23:07
Cita de: "Eternal Idol"
Cita de: "su -"
Ahora, yo no se de C/C++ asi que como dice Radical, no me peguen
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3.  
  4. void main()
  5. {
  6.   int numeros[]= { 1, 2, 3, 4, 5, 6 };
  7.   int i = 0;
  8.  printf(&#34;NULL: %d &#34;, numeros[(int)NULL]);
  9.  printf(&#34;Con i: %d &#34;, numeros[i]);
  10. }
  11.  
  12.  

Asi da compilado en C y C++: "NULL: 1 Con i: 1"
Que raro, a mi me dice que NULL no es un entro, no compila, defini NULL (no se si deba) asi:
Código: Text
  1. #include &#60;stdio.h&#62;
  2.  
  3. #define NULL (char *)0) /* no se si este bien */
  4.  
  5. void main()
  6. {
  7.   int numeros[]= { 1, 2, 3, 4, 5, 6 };
  8.   int i = 0;
  9.  printf(&#34;NULL: %d &#34;, numeros[(int)NULL]);
  10.  printf(&#34;Con i: %d &#34;, numeros[i]);
  11. }
  12.  

Y Dice (GCC 4.1.1)
In file include from /usr/include/_G_confi.h:14,
from /usr/include/libio.h:32, from /usr/include/stdio.h:72, from test.c:1
/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include/stddef.h:402:1:1 warning: this is the location of the previous deinition
test.c: In function 'main':
test.c:10: error: array subscript is not an integer :unsure:
Título: Re: Diferenciaa
Publicado por: RadicalEd en Martes 5 de Diciembre de 2006, 23:07
Cita de: "F_Tanori"
NULL es 0 un espacio definido por el compilador que puede ser modificado por el programador para apuntar hacia donde le pege la gana, aunque eso es 'romper' el estandar pero es posible hacer que null no sea 0
Entonces, finalmete deduciendo al final (jejeje)

NULL puede ser diferente de '0', solo que no se cambia por no dañar un standard
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 23:08
Cita de: "F_Tanori"
osea no llegamos a nada  :unsure:

NULL es 0 un espacio definido por el compilador que puede ser modificado por el programador para apuntar hacia donde le pege la gana, aunque eso es 'romper' el estandar pero es posible hacer que null no sea 0
Todo lo contrario, llegamos mucho mas lejos que en el hilo anterior donde quedo una verdad a medias. NULL suele ser una macro con lo cual hasta la podemos definir nosotros, si no incluimos ningun header no existe, y podemos poner #define NULL 5005 o #define NULL 140-139-1. El primero quebraria el standard y el segundo no. CUALQUIER compilador de C y C++ que se precie seguira el standard, especialmente en cosas tan simples.
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 23:09
comparto lo que dice radical, solo que en ningún lado dice que por estandar null deba ser 0
Título: Re: Diferenciaa
Publicado por: RadicalEd en Martes 5 de Diciembre de 2006, 23:10
Cita de: "su -"
Que raro, a mi me dice que NULL no es un entro, no compila, defini NULL (no se si deba) asi:
Código: Text
  1. #include &#60;stdio.h&#62;
  2.  
  3. #define NULL (char *)0) /* no se si este bien */
  4.  
  5. void main()
  6. {
  7.   int numeros[]= { 1, 2, 3, 4, 5, 6 };
  8.   int i = 0;
  9.  printf(&#34;NULL: %d &#34;, numeros[(int)NULL]);
  10.  printf(&#34;Con i: %d &#34;, numeros[i]);
  11. }
  12.  

Y Dice (GCC 4.1.1)
In file include from /usr/include/_G_confi.h:14,
from /usr/include/libio.h:32, from /usr/include/stdio.h:72, from test.c:1
/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include/stddef.h:402:1:1 warning: this is the location of the previous deinition
test.c: In function 'main':
test.c:10: error: array subscript is not an integer :unsure:
NULL ya esta definido su-, por eso suelta el error.
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 23:10
Cita de: "Eternal Idol"
CUALQUIER compilador de C y C++ que se precie seguira el standard, especialmente en cosas tan simples.
lo que pasa es que ese 'que se precie' es un juicio de cada cual, proque el que lo quiera hacer diferente es libre de hacerlo... incluso un compilador hecho pro estudiantes sin necesidad de que 'se precie' puede escoger usar NULL como 0
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 23:11
Cita de: "su -"
Cita de: "Eternal Idol"
Cita de: "su -"
Ahora, yo no se de C/C++ asi que como dice Radical, no me peguen
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3.  
  4. void main()
  5. {
  6.   int numeros[]= { 1, 2, 3, 4, 5, 6 };
  7.   int i = 0;
  8.  printf(&#34;NULL: %d &#34;, numeros[(int)NULL]);
  9.  printf(&#34;Con i: %d &#34;, numeros[i]);
  10. }
  11.  
  12.  

Asi da compilado en C y C++: "NULL: 1 Con i: 1"
Que raro, a mi me dice que NULL no es un entro, no compila, defini NULL (no se si deba) asi:
Código: Text
  1. #include &#60;stdio.h&#62;
  2.  
  3. #define NULL (char *)0) /* no se si este bien */
  4.  
  5. void main()
  6. {
  7.   int numeros[]= { 1, 2, 3, 4, 5, 6 };
  8.   int i = 0;
  9.  printf(&#34;NULL: %d &#34;, numeros[(int)NULL]);
  10.  printf(&#34;Con i: %d &#34;, numeros[i]);
  11. }
  12.  

Y Dice (GCC 4.1.1)
In file include from /usr/include/_G_confi.h:14,
from /usr/include/libio.h:32, from /usr/include/stdio.h:72, from test.c:1
/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include/stddef.h:402:1:1 warning: this is the location of the previous deinition
test.c: In function 'main':
test.c:10: error: array subscript is not an integer :unsure:
tendrias que hacerle un #undef...
Título: Re: Diferenciaa
Publicado por: su - en Martes 5 de Diciembre de 2006, 23:14
Aun asi, aunque este definido en stdio GCC no lo ve como un numero entero, Radical le da el mismo error.
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 23:14
Cita de: "JuanK"
Cita de: "Eternal Idol"
CUALQUIER compilador de C y C++ que se precie seguira el standard, especialmente en cosas tan simples.
lo que pasa es que ese 'que se precie' es un juicio de cada cual, proque el que lo quiera hacer diferente es libre de hacerlo... incluso un compilador hecho pro estudiantes sin necesidad de que 'se precie' puede escoger usar NULL como 0
Si, PERO NO SERIA STANDARD, que es lo que afirmaste en el otro hilo. NO SERIA STANDARD.

Te invito a dejar la necedad y RAZONAR, deja de hacer el ridiculo:


Esto es lo que dijiste primero:
Macro NULL ANSI C
#define NULL
Un puntero nulo constante definido según la implementación.

Esto es de tu pagina http://www.greenend.org.uk/rjk/2001/02/cfu.html: (http://www.greenend.org.uk/rjk/2001/02/cfu.html:)

The standard says:
An integral constant expression with the value 0, or such an expression cast to void *, is called a null pointer constant. If a null pointer constant is assigned to or compared for equality to a pointer, the constant is converted to a pointer of that type. Such a pointer, called a null pointer, is guaranteed to compared unequal to a pointer to any object or function.

¿Que es un puntero nulo constante segun el standard? Una expresion constante cuyo valor es 0. ¿Lo entendes o no sos capaz?
Título: Re: Diferenciaa
Publicado por: RadicalEd en Martes 5 de Diciembre de 2006, 23:16
Cita de: "su -"
Aun asi, aunque este definido en stdio GCC no lo ve como un numero entero, Radical le da el mismo error.
Por que no es un entero, es un puntero.
Título: Re: Diferenciaa
Publicado por: su - en Martes 5 de Diciembre de 2006, 23:18
Cita de: "RadicalEd"
Cita de: "su -"
Aun asi, aunque este definido en stdio GCC no lo ve como un numero entero, Radical le da el mismo error.
Por que no es un entero, es un puntero.
Eso te pasa cuando usas lenguajes post-modernos  :wacko: donde no hay problema contal cosa (si en Perl se puede, sin problema)  :smartass:
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 23:19
Cita de: "Eternal Idol"
Cita de: "JuanK"
Cita de: "Eternal Idol"
CUALQUIER compilador de C y C++ que se precie seguira el standard, especialmente en cosas tan simples.
lo que pasa es que ese 'que se precie' es un juicio de cada cual, proque el que lo quiera hacer diferente es libre de hacerlo... incluso un compilador hecho pro estudiantes sin necesidad de que 'se precie' puede escoger usar NULL como 0
Si, PERO NO SERIA STANDARD, que es lo que afirmaste en el otro hilo. NO SERIA STANDARD.

Te invito a dejar la necedad y RAZONAR, deja de hacer el ridiculo:


Esto es lo que dijiste primero:
Macro NULL ANSI C
#define NULL
Un puntero nulo constante definido según la implementación.

Esto es de tu pagina http://www.greenend.org.uk/rjk/2001/02/cfu.html: (http://www.greenend.org.uk/rjk/2001/02/cfu.html:)

The standard says:
An integral constant expression with the value 0, or such an expression cast to void *, is called a null pointer constant. If a null pointer constant is assigned to or compared for equality to a pointer, the constant is converted to a pointer of that type. Such a pointer, called a null pointer, is guaranteed to compared unequal to a pointer to any object or function.

¿Que es un puntero nulo constante segun el standard? Una expresion constante cuyo valor es 0. ¿Lo entendes o no sos capaz?
Solo te duele no tener la razón.

cada cual que defina por si mismo que es que... para mi no quedo definido nada de lo que tu dices, pero tampoco lo que yo dije... el estándar o no es claro o esta libre a como lo quiera hacer cada cual.

No es necesario insultar a nadie para hacerse notar.  ;)
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 23:22
Cita de: "JuanK"
Solo te duele no tener la razón.

cada cual que defina por si mismo que es que... para mi no quedo definido nada de lo que tu dices, pero tampoco lo que yo dije... el estándar o no es claro o esta libre a como lo quiera hacer cada cual.
Pobrecito, el que no tiene la razon sos vos y no tenes COMO SIEMPRE la capacidad de hacer autocritica. Se nota que pasan los años y seguis siendo el mismo, es una pena.

El standard es CLARISIMO, NULL tiene que tener como valor 0. De no verlo te recomiendo comprar anteojos.
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 23:25
El que quiera ver que vea:

"Macro NULL ANSI C
#define NULL
Un puntero nulo constante definido según la implementación. "

4.10 - Pointer conversions [conv.ptr]

-1- A null pointer constant is an integral constant expression (expr.const) rvalue of integer type that evaluates to zero.

An integral constant expression with the value 0, or such an expression cast to void *, is called a null pointer constant. If a null pointer constant is assigned to or compared for equality to a pointer, the constant is converted to a pointer of that type. Such a pointer, called a null pointer, is guaranteed to compared unequal to a pointer to any object or function.

El valor de un puntero nulo constante es 0.
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 23:25
por el momento al menos no he visto en ningún lugar de ANSI C que diga que NULL DEBE ser 0...

Dice que :

Un puntero nulo constante definido según la implementación.


Y si... es dificil cambiar... y tú eres un muy buen ejemplo también...  :lol:  pero ni modo asi somos, con virtudes y defectos.
Título: Re: Diferenciaa
Publicado por: su - en Martes 5 de Diciembre de 2006, 23:27
Disculpen, pero creo que los menajes de "yo tengo la razon y tu no" van mejor por MP no me pelen, solo sugiero, es que asi el foro se ve sucio, que se puede esperar de un lugar que hablan y hablan de difernecias en "peleas" por algo que no debe...
Lo sugiero para que se tenga que cerrar esto...
 :)
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 23:28
Cita de: "JuanK"
por el momento al menos no he visto en ningún lugar de ANSI C que diga que NULL DEBE ser 0...

Dice que :

Un puntero nulo constante definido según la implementación.
Es que no debe ser 0. ¿Tenes problemas de compresion? SU VALOR DEBE SER 0.
¿No leiste todavia lo que es un puntero nul constante?

4.10 - Pointer conversions [conv.ptr]

-1- A null pointer constant is an integral constant expression (expr.const) rvalue of integer type that evaluates to zero.

An integral constant expression with the value 0, or such an expression cast to void *, is called a null pointer constant. If a null pointer constant is assigned to or compared for equality to a pointer, the constant is converted to a pointer of that type. Such a pointer, called a null pointer, is guaranteed to compared unequal to a pointer to any object or function.
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 23:30
Cita de: "su -"
Disculpen, pero creo que los menajes de "yo tengo la razon y tu no" van mejor por MP no me pelen, solo sugiero, es que asi el foro se ve sucio, que se puede esperar de un lugar que hablan y hablan de difernecias en "peleas" por algo que no debe...
Lo sugiero para que se tenga que cerrar esto...
 :)
No hay razon en esto sino realidad. Y creo que con solo leer detenidamente lo que dice el standard cualquier persona normal tiene que darse cuenta que NULL tiene que tener como valor 0.
Título: Re: Diferenciaa
Publicado por: su - en Martes 5 de Diciembre de 2006, 23:37
Bueno...
http://c-faq.com/null/nullor0.html (http://c-faq.com/null/nullor0.html)
 :rolleyes:
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 23:38
Cita de: "su -"
Bueno...
http://c-faq.com/null/nullor0.html (http://c-faq.com/null/nullor0.html)
 :rolleyes:
Eso no explica nada sobre que debe ser NULL segun el standard, solo dice como esta creo que bien aclarado, que NULL puede ser incluso (no en C++ pero si en C) ((void *)0). Ahi vemos un ejemplo claro de correcto uso del standard ya que el valor de NULL es 0.
Título: Re: Diferenciaa
Publicado por: JuanK en Martes 5 de Diciembre de 2006, 23:42
no.
Título: Re: Diferenciaa
Publicado por: su - en Martes 5 de Diciembre de 2006, 23:48
17.10:
Citar
Programming style, like writing style, is somewhat of an art and cannot be codified by inflexible rules, although discussions about style often seem to center exclusively around such rules.
Ademas no creo que se puede poner un estandar ya que NULL se puede usar como un numeral y no como un numero... eso creo no se.
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 23:51
Cita de: "su -"
17.10:
Citar
Programming style, like writing style, is somewhat of an art and cannot be codified by inflexible rules, although discussions about style often seem to center exclusively around such rules.
Ademas no creo que se puede poner un estandar ya que NULL se puede usar como un numeral y no como un numero... eso creo no se.
El estilo de programacion no tiene NADA que ver con el standard. Y no importa que no lo creas realmente, no tenes que creer nada, tenes que leer lo que dice el standard y punto, haciendolo sabras que condiciones tiene que cumplir un compilador para ser justamente standard.
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Martes 5 de Diciembre de 2006, 23:52
Cuando se discuten estilos de programacion suele ser de cosas como estas:

Código: Text
  1.  
  2. if (x)
  3.   hacer();
  4.  
  5. if (x) { hacer(); }
  6.  
  7. if (x)
  8. {
  9.   hacer();
  10. }
  11.  
  12.  

O cantidad de tabs, nombres de variables, clases, etc.
Título: Re: Diferenciaa
Publicado por: su - en Miércoles 6 de Diciembre de 2006, 00:09
Bueno, quien soy yo para hablar de esto, esta claro que si dice asi (el compilador/interpretado...) asi debera ser, justifica las limitaciones y ciertamente las tendras...
En fin NULL es 0  :P
Título: Re: Diferenciaa
Publicado por: Eternal Idol en Miércoles 6 de Diciembre de 2006, 00:13
Cita de: "su -"
Bueno, quien soy yo para hablar de esto, esta claro que si dice asi (el compilador/interpretado...) asi debera ser, justifica las limitaciones y ciertamente las tendras...
En fin NULL es 0  :P
Jeje, a efectos practicos si, NULL es 0, su valor debe ser 0 pero puede ser cosas como 100-95-5 o (char*)0, todo mientras su valor sea 0 en C sera valido.

En fin, me voy a dormir y les dejo un consejo: LEAN y APRENDAN/MEJOREN SU INGLES (yo trato de hacerlo siempre) ya que lamentablemente hay demasiadas cosas utiles que no estan en castellano.
Título: Re: Diferenciaa
Publicado por: Mollense en Miércoles 6 de Diciembre de 2006, 00:24
¿A donde quieren llegar con semejante ridiculez?

Dejen de buscarle la quinta pata al gato porque no tiene.

Ningún proyecto está en juego dependiendo del valor de NULL porque ningún programador serio utilizaría un lenguaje hecho por un estúpido que decida asignarle otro valor creo yo.

Supermancito, no te mueras nunca

Paz y amor  :hippi:
Título: Re: Diferenciaa
Publicado por: JuanK en Miércoles 6 de Diciembre de 2006, 02:18
:lol:
Título: Re: Diferenciaa
Publicado por: NiCH en Miércoles 6 de Diciembre de 2006, 03:06
Bueno la que he liado con el comentario sobre NULL  :o

y todo a raíz de un hilo con poco sentido..

Dar una opinión a estas alturas es poco menos que un suicidio visto como está el patio, pero aún así voy a decir mi opinión fundada en los libros que he leído, ya que no tengo el documento del ANSI estándar a mano: NULL sólo tiene sentido usarlo en el contexto de los punteros y es equivalente a 0 y en ninguno más aunque se pueda rizar el rizo con definiciones absurdas. Mi comentario viene a raíz de que muchos programadores prefieren inicializar un puntero a 0 en vez de a NULL por mayor legibilidad y compatibilidad con los compiladores. Y doy por zanjado el tema.

Pena que este hilo en vez de tener contenido didáctico esté lleno de descalificaciones, no sé vosotros pero prefiero leer sobre el tema que discutir en vano, estos concursos de a ver quién sabe más y quién es más cabezota me parecen tristes.

Salu2   :hola:
Título: Re: Diferenciaa
Publicado por: supermancito en Miércoles 6 de Diciembre de 2006, 03:11
aqui si que son muy buenos todos  la verdad nunca vi foros donde discutan tanto un tema la verdad ustedes me ayudan mucho son buena honda :comp:  :comp:  :comp:  :hola:  :hola:

pd: soy un caso medio perdido no doy un tema y todos a discutir bien la verdad sigan adelante no desfallescan pronto les dare mas tareasssss :smartass:  :smartass:
Título: Re: Diferenciaa
Publicado por: lencho en Miércoles 6 de Diciembre de 2006, 16:34
Citar
pd: soy un caso medio perdido no doy un tema y todos a discutir bien la verdad sigan adelante no desfallescan pronto les dare mas tareasssss smartass.gif smartass.gif

Qe burrera que toda esta discusion se inicio por una tarea. :angry:  :angry:  :angry:  :angry:  :angry:  :angry:
pero mientras la discusion haya servido para enriquecer el conocimiento. NO IMPORTA.

BYTE.