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

FILE tip pokazivaca

[es] :: C/C++ programiranje :: FILE tip pokazivaca

[ Pregleda: 2658 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

OTAC_XXL
Benjamin

Član broj: 98749
Poruke: 36
*.PPPoE-5723.sa.bih.net.ba.



Profil

icon FILE tip pokazivaca13.03.2007. u 10:57 - pre 207 meseci
Pozdrav,

Ako bi mi neko mogao objasniti sta radi ovaj dio koda:

FILE *outfile=(FILE*)NULL;

Znam da FILE *outfile pravi pokazivac na FILE tip radi kasnijeg kreiranja filea, ali mi nije jasno sta uradio ovaj dio iza znaka =


Sve mozes nahraniti ali oci nikad :-)
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
89.190.198.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: FILE tip pokazivaca13.03.2007. u 11:46 - pre 207 meseci
Deo iza = inicijalizuje polazivač na NULL vrednost. Stvar koja ne mora biti eksplicitno napisana je "(FILE*)" deo, koji makro NULL (koji je u stvari nula) 'kastuje' na tip FILE*. U praksi može da se kaže i:

Code:
FILE *outfile = NULL;
ili samo
Code:
FILE *outfile = 0;

Znači, opet, "(FILE*)" je samo eksplicitni 'kast' vrednosti koju nosi NULL na tip FILE*. Ovo se dešava pre dodele vrednosti sa "=".
Ipak se ++uje.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: FILE tip pokazivaca13.03.2007. u 11:49 - pre 207 meseci
Citat:

Znam da FILE *outfile pravi pokazivac na FILE tip radi kasnijeg kreiranja filea, ali mi nije jasno sta uradio ovaj dio iza znaka =

Pre poziva fopen(), FILE *outfile je običan pokazivač koji ne pokazuje ninašta validno,
a jeste predviđen da pokazuje na neki fajl stream, i to u slučaju uspešnog izvršenja fopen().

Ukoliko kao rezultat fopen() vrati neku vrednost različitu od NULL, ta vrednost će označavati
adresu fajl stream-a odakle se može čitati. Ukoliko vrati NULL, došlo je do greške u pristupu fajlu, i pointer
nije validan (biće postavljen na NULL od strane fopen).

Citat:

FILE *outfile=(FILE*)NULL;

Osnovni uzrok ovakvih izraza je što C++ ne definiše koju vrednost će imati outfile pre fopen(), tj. pri deklaraciji
generalno.

Ovde je autor eksplicitno dodelio NULL pointeru outfile, najverovatnije bespotrebno (treba videti veće
parče koda), jer po standardu svakako će vrednost biti NULL ako dođe do greške. Ono (FILE*) je cast-ovanje,
tj. izjednačavanje po tipu sa leve strane izraza, da se kompajler ne bi (eventualno) pobunio.
Dakle, moglo je i:
Code:

FILE *outfile=NULL;
// ili:
FILE *outfile=0;
// ili samo:
FILE *outfile; // <-- u slučaju fopen greške, svakako će biti NULL.


Doduše, ja takođe volim da koristim eksplicitne dodele NULL pointera (mada nije po principima), pogotovo kada
imam puno pointera u nizu koji se instanciraju jer imam veću slobodu da kasnije za sobom počistim smeće ako
slučajno dođe do greške usred procedure, npr:

// PSEUDO
Code:

// ...
FILE *p1 = NULL;
FILE *p2 = NULL;
FILE *p3 = NULL;
// ...
{
p1 = fopen()
// neki break u slučaju greške koji zaobilazi p2 i p3
p2 = fopen()
// neki break u slučaju greške koji zaobilazi p3
p3 = fopen()
// neki break u slučaju greške koji zaobilazi ostatak koda koji se oslanja na ispravnost pointera
}
// ...
ciscenje()
// ...
void ciscenje()
{
   if ( p1 )
      fclose( p1 );
   if ( p2 )
      fclose( p2 );
   if ( p3 )
      fclose( p3 );
}

... ovim se kao osigurava da neka slučajna vrednost p1 ili p2 ili p3 dođe na fclose(), što dovodi do greške.
 
Odgovor na temu

OTAC_XXL
Benjamin

Član broj: 98749
Poruke: 36
*.PPPoE-5723.sa.bih.net.ba.



Profil

icon Re: FILE tip pokazivaca13.03.2007. u 12:08 - pre 207 meseci
Hvala puno svima na iscrpnim odgovorima, puno mi je pomoglo da razjasnim sebi ovaj pristup programiranja.

Tnx :-)
Sve mozes nahraniti ali oci nikad :-)
 
Odgovor na temu

[es] :: C/C++ programiranje :: FILE tip pokazivaca

[ Pregleda: 2658 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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