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: 6086 | Odgovora: 27 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

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 ?01.06.2004. u 10:47 - pre 242 meseci
Code:

void f(int x) 
 {
  cout <<"int" << endl;
 } 

void f(char* c) 
 {
  cout <<"pointer" << endl;
 }

f( NULL ); //A ja 'teo f(char* c);


10x 2 Julijan Sribar.


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 ?07.06.2004. u 15:56 - pre 242 meseci
Citat:
DDMM:
Citat:
srki:
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.

Ne, ti nisi to pricao. Ti si pricao da ne mora da znaci da je konstanta NULL nula a u C++ standardu kaze da mora da bude nula.
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

Ti si izgledao mesao NULL konstantu (null pointer constant) i null pointer kada si pisao svoje odgovore pa si zato pisao da NULL ne mora da bude nula.

Po C++ standardu null pointer ne mora da bude nula ali NULL mora da bude nula. Kada pisem NULL to je onda null konstanta a ne null pointer.

Problem je sto mnogi ne razlikuju null pointer constant i null pointer.

P.S. Sto se ova tema ne prebaci u C++ forum? To mora da uradi neki smod jer su moderatori ovog foruma neaktivni.
 
Odgovor na temu

sspasic
Sasa Spasic

Član broj: 3261
Poruke: 175
*.medianis.net

Jabber: sspasic@elitesecurity.org
ICQ: 35454521


Profil

icon Re: Da li NULL uvek mora biti 0 ?07.06.2004. u 18:15 - pre 242 meseci
Mislim da je pitanje šta znači 'NULL je 0'.
Ako je
#define NULL 0
ili
#define NULL ((void *)0)
u iskazu a = NULL i a == NULL postoji konverzija celobrojne konstante 0 u null pointer koja se izvrši u vreme kompajliranja. a ne mora da bude 0 kada pogledate koju vrednost (bitove) ima memorijska lokacija u kojoj je zapisana promenljiva a.

U praksi je uglavnom 0, ali mislim da sam pročitao da postoji bar jedna arhitektura gde to nije slučaj (na žalost ne mogu da se setim koja i gde sam pročitao).
I čini mi se da se formulacija menjala sa različitim C/C++ standardima.
 
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 ?07.06.2004. u 19:27 - pre 242 meseci
rekao bih da je ova tema otisla prilicno offtopic, iako je u sustini zanimljiva. NULL macro je u sustini uveden najvise iz stilskih razloga i kao takav se zadrzao jos mnogo posle 1-og izdanja C programming language-a (K&R), uz neizbeznu standardizaciju.
ako se vec potegla standardna C/C++ diskusija sa topic-om "ciji standard je veci" mislim da bi ona mogla kulturno da stane na ove 2 tacke:
1) C99 standardu korespondira:
#define NULL ((void *)0)
2) C++98 standardu korespondira:
#define NULL 0
ja zaista nisam video drugacije zapise ovih makroa (u skladu sa standardima) i bilo bi lepo da neko iznese drugaciji primer na standardnim arhitekturama.

Citat:
sspasic:
U praksi je uglavnom 0, ali mislim da sam pročitao da postoji bar jedna arhitektura gde to nije slučaj (na žalost ne mogu da se setim koja i gde sam pročitao).


ovo je tacno u slucajevima prime, cdc cyber i honeywell-bull mainframe-ova i simbolickih lisp masina (koje zbog prirode arhitekture i nisu imale konvencionalne numericke pointere).

[Ovu poruku je menjao caboom dana 08.06.2004. u 03:32 GMT]
 
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 ?07.06.2004. u 21:22 - pre 242 meseci
zaboravio sam takodje da je u slucaju arhitekture koja nema zero bit pattern kao null pointer kompajler odgovoran da prevede isti u odgovarajuci format. bla, bla... uostalom sigurno ima relevantnijih informacija na guglu.
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.plus.com



+4 Profil

icon Re: Da li NULL uvek mora biti 0 ?07.06.2004. u 21:36 - pre 242 meseci
U knjizi "More C++ Gems" postoji izvanredan chlanak bash na ovu temu :
"Much Ado About NULL".
Slichan chlanak je Herb Sutter objavio u CUJ-u. Veoma interesantno shtivo :)
 
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 ?08.06.2004. u 01:47 - pre 242 meseci
Citat:
DDMM:
Code:

void f(int x) 
 {
  cout <<"int" << endl;
 } 

void f(char* c) 
 {
  cout <<"pointer" << endl;
 }

f( NULL ); //A ja 'teo f(char* c);



ovo mi je nekako promaklo... posto sam koNJpajler u sustini zaduzen za prevodjenje null pointer-a tokom samog kompajliranja (a ne u runtime-u) ovde je sasvim validan potez npr:

Code:

f((char *)NULL);


prljavo, zar ne? ali radi...

Citat:
NastyBoy:U knjizi "More C++ Gems" postoji izvanredan chlanak bash na ovu temu :
"Much Ado About NULL".
Slichan chlanak je Herb Sutter objavio u CUJ-u. Veoma interesantno shtivo :)


zavisi kako i sa koje strane gledas. ako treba da implementiras null pointere pri samom kompajleru uopste nije naivno. danas manje-vise sve nove arhitekture imaju zero null pointer, ali da npr. treba to da implementiras za matore cdc cyber-e koji imaju valjda beshe 48-mo bitne pointere koji se sastoje od ring-a, segmenta i offseta, pri cemu se programi u userspace-u vrte u ring-u 11, to bi znacilo da ti je null pointer za user-space programe 0xB0..0. zar nije charobno... elem, slazem se da sa stanovista npr. high-level programera koji dizajnira bizmis aplikacije to predstavlja apsolutno nebitan podatak, ali ova tema je prvobitno zapoceta u "kernel i OS programiranju" tako da nekome ovako nesto moze da bude i interesantno stivo. ako gledamo ovo sa stanovista kernel programiranja (osim u retkim slucajevima gde postoje odr. varijante embedded c++-a (obicno strip-ovani cpp, npr. nema visestrukog nasledjivanja, etc.)) vratio bih se na moj prvi odgovor:
#define ((void *)0) NULL
 
Odgovor na temu

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

Strane: 1 2

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

Postavi temu Odgovori

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