Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Da li NULL uvek mora biti 0 ?

[es] :: C/C++ programiranje :: Da li NULL uvek mora biti 0 ?

Strane: 1 2

[ Pregleda: 6038 | Odgovora: 27 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Paxy
Bojović Petar
Računarski fakultet - Asistent -
Administrator mreže
Rusanj, Beograd

Član broj: 7003
Poruke: 355
217.24.18.*

Sajt: a.paxy.in.rs


+8 Profil

icon Da li NULL uvek mora biti 0 ?12.05.2004. u 11:17 - pre 242 meseci
Evo jednog zanimljivog pitanja !!!

Da li NULL mora uvek biti na adresi 0 u memoriskom prostoru ?
Da li je uvek tako u svim uredjajima, svim sistemima, svim programskim jezicima ?
Fight with the best, fall like a rest.
 
Odgovor na temu

byTer

Član broj: 10936
Poruke: 1221
*.info-net.co.yu

ICQ: 47761626


Profil

icon Re: Da li NULL uvek mora biti 0 ?12.05.2004. u 13:08 - pre 242 meseci
NULL nije nula vec je vrednost izraza za praznu varijablu. Znaci nije ni 0 ni '' vec samo null (nil u C-u).
 
Odgovor na temu

caboom
Igor Bogicevic
bgd

Član broj: 255
Poruke: 1503
217.26.67.*

ICQ: 60630914


+1 Profil

icon Re: Da li NULL uvek mora biti 0 ?12.05.2004. u 13:15 - pre 242 meseci
po standardima:
#define NULL ((void *)0)
 
Odgovor na temu

DDMM
Dejan D. M. Milosavljevic
Danguba
Gajba, ali ne piva.

Član broj: 2544
Poruke: 89
*.sbb.co.yu

Sajt: www.ddmrm.com


Profil

icon Re: Da li NULL uvek mora biti 0 ?17.05.2004. u 15:23 - pre 241 meseci


ISO-IEC 9899--1999 (E)
7.17/3
The macros are NULL which expands to an implementation-defined null pointer constant;


ISO-IEC-14882--1998
4.10/1
A null pointer constant is an integral constant expression (5.19) rvalue of integer type that evaluates to zero;


X
 
Odgovor na temu

***ArChAnGeL***
Ivan Stajic
Beograd

Član broj: 18217
Poruke: 17
*.ppp-bg.sezampro.yu



Profil

icon Re: Da li NULL uvek mora biti 0 ?18.05.2004. u 02:37 - pre 241 meseci
NULL uglavnom ima vrednost 0.Mada po standardu C-a to nije obavezno pravilo pa se moze reci da zavisi od kompajlera.
U svakom slucaju poredjenje poentera sa nulom nije preporucljivo (radi ali i nemora uvek) Vec jednostavno poredi sa NULL i ne razbijaj glavu sta je razvojni tim kompajlera utripovao.
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.ec.auckland.ac.nz



+3 Profil

icon Re: Da li NULL uvek mora biti 0 ?18.05.2004. u 02:52 - pre 241 meseci
Citat:
***ArChAnGeL***:
NULL uglavnom ima vrednost 0.Mada po standardu C-a to nije obavezno pravilo pa se moze reci da zavisi od kompajlera.

Po standardu C-a to je obavezno pravilo! Ako kompajler prati standarde svuda mozes da pises 0 umesto NULL ako hoces.

http://www.eskimo.com/~scs/C-faq/q5.10.html

Citat:

No. (Using NULL may be preferable, but not for this reason.) Although symbolic constants are often used in place of numbers because the numbers might change, this is not the reason that NULL is used in place of 0. Once again, the language guarantees that source-code 0's (in pointer contexts) generate null pointers. NULL is used only as a stylistic convention.
 
Odgovor na temu

DDMM
Dejan D. M. Milosavljevic
Danguba
Gajba, ali ne piva.

Član broj: 2544
Poruke: 89
*.sbb.co.yu

Sajt: www.ddmrm.com


Profil

icon Re: Da li NULL uvek mora biti 0 ?18.05.2004. u 12:43 - pre 241 meseci
Citat:

Po standardu C-a to je obavezno pravilo! Ako kompajler prati standarde svuda mozes da pises 0 umesto NULL ako hoces.


Netacno.
Citiraj standard kao sto sam ja.

Citat:

No. (Using NULL may be preferable, ...

Ne pise nigde u STANDARD-u.
Takav faq mogu i ja da napisem.

ALI...

Standard za C ( ISO-IEC-9899--1999 ) je jasan:

Citat:

ISO-IEC 9899--1999 (E)
7.17/3
The macros are NULL which expands to an implementation-defined null pointer constant;



Za C++ takodje:
Citat:

ISO-IEC-14882--1998
4.10/1
A null pointer constant is an integral constant expression (5.19) rvalue of integer type that evaluates to zero;






X
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.dialup.xtra.co.nz



+3 Profil

icon Re: Da li NULL uvek mora biti 0 ?18.05.2004. u 20:29 - pre 241 meseci
Citat:
e pise nigde u STANDARD-u.

Kako ne pise?

Citat:
Takav faq mogu i ja da napisem.

Faq je odlican. Verovatno najpoznatiji c faq. Ne znam sto si ovo rekao.

Citat:
A null pointer constant is an integral constant expression (5.19) rvalue of integer type that evaluates to zero;


Pa zar nisam ja to rekao? Uvek mozes null konstantu da zamenis sa 0 jer je to isto.

Da nije tako onda ovi izrazi ne bi bili legalni:
if(p){}
if(p==0) {}

Citat:
iso9899:
6.3.2.3 Pointers
An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.


Znaci moze i integer konstanta nula, ne mora da bude kastovano. Da mora, oni izrazi sto sam naveo ne bi bili u redu. Po standardu pointer uvek mozes da poredis sa nulom.

Takodje,
Citat:
ansi_iso_iec_14882_1998
73. strana, odeljak 5.2.10 na dnu pise
"converting an integral constant expression with value zero always yield a null pointer, but converting other expressions that happen to have value zero not yield a null pointer."
 
Odgovor na temu

DDMM
Dejan D. M. Milosavljevic
Danguba
Gajba, ali ne piva.

Član broj: 2544
Poruke: 89
*.sbb.co.yu

Sajt: www.ddmrm.com


Profil

icon Re: Da li NULL uvek mora biti 0 ?19.05.2004. u 14:19 - pre 241 meseci
Standard kaze da NULL ne mora da bude adresa nula,
ali pri konverziji u int dobijas nulu.

To sto vecina kompajlera forsira da je NULL nulta adresa je
da bi konverzija bila brza.

Na nekim sistemima int i pointer se "tretiraju" kao jedno te isto.

Kad poredis pointer i nulu, nulu kompajler posmatra kao int.
Pa imas konverzije iz nule( tip int) u NULL( tip pointer) da bi poredjenje moglo da bude izvrseno.

itd.
X
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.dialup.xtra.co.nz



+3 Profil

icon Re: Da li NULL uvek mora biti 0 ?20.05.2004. u 14:24 - pre 241 meseci
Citat:
Standard kaze da NULL ne mora da bude adresa nula,
ali pri konverziji u int dobijas nulu.

Netacno, standard kaze da je NULL integralna konstanta sa vrednoscu nula. Pa ti si sam to citirao:

Citat:
A null pointer constant is an integral constant expression (5.19) rvalue of integer type that evaluates to zero


Citat:
Kad poredis pointer i nulu, nulu kompajler posmatra kao int.

Netacno. Nulu kompajler predstavlja kao null pointer pri poredjenju sa pointerom. Recimo ne mozes promenjivu tipa int koju ima vrednost nula da poredis sa pointerom i da tako gledas da li je to null pointer. To nije portabilno i nije po standardu. To i pise jednom od gornjih citata.
 
Odgovor na temu

DDMM
Dejan D. M. Milosavljevic
Danguba
Gajba, ali ne piva.

Član broj: 2544
Poruke: 89
*.sbb.co.yu

Sajt: www.ddmrm.com


Profil

icon Re: Da li NULL uvek mora biti 0 ?21.05.2004. u 11:38 - pre 241 meseci
srki objasni ovo:
Citat:

ISO-IEC 9899--1999 (E)
7.17/3
The macros are NULL which expands to an implementation-defined null pointer constant;


Citiram tebe:
Citat:


iso9899:
6.3.2.3 Pointers
An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.




Znaci ovo je legalno:


Code:

void *p;
const int a=10, b=10;
// ...
// ...

if( p !=( a-b ) ) {/*...*/}
if( p !=(int)0 ) {/*...*/}
if( p !=(24-24) ) {/*...*/}


X
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.dialup.xtra.co.nz



+3 Profil

icon Re: Da li NULL uvek mora biti 0 ?21.05.2004. u 14:00 - pre 241 meseci
Ono prvo nije legalno ali drugo i trece jeste legalno.
Zasto ono prvo nije?
Zato sto kompajler ne zna da li je a-b jednako nuli. To ti se vidi u toku izvrsavanja programa. Tu ono const samo znaci da promenjive a i b ne smes da menjas ali kompajler ne posmatra njihove vrednosti i ne zna koje su njihove vrednosti prilikom racunanja izraza a-b. To ti program izracuna u toku rada. Da si stavio #define onda bi radilo.

U izrazu "An integer constant expression with the value 0" ono integer constant expression se odnosi na izraz koji je konstanta prilikom kompajliranja. Recimo (2*3-1-1-2*2)

Fora je sto ce i prvi slucaj da ti radi na windowsu jer null pointer ima vrednost nula ali ti nece raditi na nekim masinama gde null pointer nema vrednost nula.

Citat:
srki objasni ovo:
ISO-IEC 9899--1999 (E)
7.17/3
The macros are NULL which expands to an implementation-defined null pointer constant;


Da, ali je standardom definisano i null pointer constant (to si ti prvi put citirao)
4.10 A null pointer constant is an integral constant expression rvalue of integer type that evaluates to zero.

Znaci 0, 2-2, 5*5-25 itd....

Onaj faq je zaista super. Ja znam da sam ga jos odavno procitao celog makar dvaput.
 
Odgovor na temu

-=k3rn3l=-
BG

Član broj: 20065
Poruke: 395
*.mobtel.co.yu



Profil

icon Re: Da li NULL uvek mora biti 0 ?21.05.2004. u 16:47 - pre 241 meseci
Ja ne razumem zasto tolike polemike. NULL ili NiL nije isto kao i vrednost 0.

A value that means, "a value is not applicable" or "the value is unknown". Nulls are not equal to any specific value, even to each other.
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.dialup.xtra.co.nz



+3 Profil

icon Re: Da li NULL uvek mora biti 0 ?22.05.2004. u 07:47 - pre 241 meseci
NULL jeste isto sto i 0. Svuda gde ti pise NULL mozes da zamenis sa 0.
 
Odgovor na temu

-=k3rn3l=-
BG

Član broj: 20065
Poruke: 395
*.mobtel.co.yu



Profil

icon Re: Da li NULL uvek mora biti 0 ?22.05.2004. u 18:56 - pre 241 meseci
Pa cekaj jeste malo konfuzno pogotovu kada programirate ali opet ponavljam

A value that means, "a value is not applicable" or "the value is unknown". Nulls are not equal to any specific value, even to each other.
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.dialup.xtra.co.nz



+3 Profil

icon Re: Da li NULL uvek mora biti 0 ?23.05.2004. u 15:06 - pre 241 meseci
U toj recenici se pod Null-om podrazumeva Null pointer a ne NULL konstanta. NULL konstanta je isto sto i nula (#define NULL 0) a kada recimo stavis p=0 kompajler kada vidi sa desne strane nulu onda ce p da postavi da bude null pointer cija vrednost zavisi od operativnog sistema i procesora. Moze cak biti i vise vrednosti null pointera. Tebe to ne treba da interesuje. Obicno je vrednost null pointera nula ali ne mora da znaci! Ali koja god da je vrednost ti kada uradis p=0 ili p=NULL kompajler ce da postavi p na pravu vrednost.

Malo jasnije?
 
Odgovor na temu

byTer

Član broj: 10936
Poruke: 1221
*.info-net.co.yu

ICQ: 47761626


Profil

icon Re: Da li NULL uvek mora biti 0 ?23.05.2004. u 20:26 - pre 241 meseci
A najnovije u delphiju Null je funkcija.
 
Odgovor na temu

DDMM
Dejan D. M. Milosavljevic
Danguba
Gajba, ali ne piva.

Član broj: 2544
Poruke: 89
*.sbb.co.yu

Sajt: www.ddmrm.com


Profil

icon Re: Da li NULL uvek mora biti 0 ?31.05.2004. u 10:59 - pre 241 meseci
srki:
Citat:
Obicno je vrednost null pointera nula ali ne mora da znaci! Ali koja god da je vrednost ti kada uradis p=0 ili p=NULL kompajler ce da postavi p na pravu vrednost.


Pa ovo pricam i ponavljam.


X
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.client.comcast.net



+18 Profil

icon Re: Da li NULL uvek mora biti 0 ?31.05.2004. u 11:12 - pre 241 meseci
U praksi NULL je 0, cisto sumnjam da postoji i jedan kompajler (koji se koristi :)) gde to nije tako. Ako nista drugo, gomila koda koja implicitno ili cak eksplicitno ocekuje da je NULL 0 ne bi radila.
 
Odgovor na temu

caboom
Igor Bogicevic
bgd

Član broj: 255
Poruke: 1503
*.vdial.verat.net

ICQ: 60630914


+1 Profil

icon Re: Da li NULL uvek mora biti 0 ?31.05.2004. u 12:32 - pre 241 meseci
jos jednom grep resava velike misterije covecanstva:

1) GCC
#undef NULL
#if defined (__cplusplus)
#define NULL 0
#else
#define NULL ((void *) 0)
#endif

2) MS VCPP VS2003
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif

3) Intel CPP
#ifndef NULL
#define NULL _NULL
#endif
.....
#define _NULL 0
 
Odgovor na temu

[es] :: C/C++ programiranje :: Da li NULL uvek mora biti 0 ?

Strane: 1 2

[ Pregleda: 6038 | Odgovora: 27 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.