Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 27 odgovora
  • 8.698 pregleda

Najnovija ↓

Re: Da li NULL uvek mora biti 0 ? 01.06.2004. u 11:47 · pre 273 meseca #21
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.

Potpis
X
Re: Da li NULL uvek mora biti 0 ? 07.06.2004. u 16:56 · pre 272 meseca #22
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.
Re: Da li NULL uvek mora biti 0 ? 07.06.2004. u 19:15 · pre 272 meseca #23
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.
Re: Da li NULL uvek mora biti 0 ? 07.06.2004. u 20:27 · pre 272 meseca #24
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]
Potpis
OV SM
LA PK
Re: Da li NULL uvek mora biti 0 ? 07.06.2004. u 22:22 · pre 272 meseca #25
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.
Potpis
OV SM
LA PK
Re: Da li NULL uvek mora biti 0 ? 07.06.2004. u 22:36 · pre 272 meseca #26
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 :)
Re: Da li NULL uvek mora biti 0 ? 08.06.2004. u 02:47 · pre 272 meseca #27
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
Potpis
OV SM
LA PK
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme