Jump to content


Forumul s-a mutat!

Aceasta este arhiva forumului MacForum.ro din perioada 2010-2014.
Noul forum poate fi accesat aici.
Conturile vechi nu mai sunt valabile pe noul forum!

Photo

C/C++


  • Please log in to reply
35 replies to this topic

#1 Andra

Andra

    Veteran

  • Membri
  • PipPipPip
  • 110 posts
  • LocationCâmpina

Posted 14 March 2010 - 00:10

Pentru inceput as avea si eu o nelamurire legata. Imi poate explica cineva ce inseamna NULL :unsure: ? Stiu ca este echivalent cu 0, dar am vzut ca poate fi folosit si in alte situatii, si nu inteleg exact. Multumesc :)

#2 Eugen Mihalache

Eugen Mihalache

    Psihoterapeut

  • Membri
  • PipPipPipPipPip
  • 1620 posts
  • LocationBad Griesbach im Rottal

Posted 14 March 2010 - 00:47

0 = NULL = Zero = Mulțimea Vidă = Nimic (la modul general)
0 = inactiv, închis, oprit, stins, în pauză, acces interzis, cale blocată, indisponibil (în tehnică)
1 = contratriul lui 0 (în tehnică)

#3 boboc

boboc

    Veteran

  • Membri
  • PipPipPipPip
  • 668 posts
  • Locationvalcea

Posted 14 March 2010 - 01:07

NULL este un macro ce are valoarea 0 in c++ iar in c este definit ca pointer de tip (void *)0

#4 Eugen Mihalache

Eugen Mihalache

    Psihoterapeut

  • Membri
  • PipPipPipPipPip
  • 1620 posts
  • LocationBad Griesbach im Rottal

Posted 14 March 2010 - 01:32

Ca să mai adaug ceva...


0 = Nu dă dreptul ca acea acțiune să fie efetuată, sau acel atribut să fie pus în pratică și să devină vizibil.
1 = Dă dreptul ca acea acțiune să fie efetuată, sau acel atribut să fie pus în pratică și să devină vizibil.

0 = mai poate însemna că atributul să își efectueze acțiunea, undeva în spatele cortinei, (cazuri destul de rare după părerea mea).

#5 Andra

Andra

    Veteran

  • Membri
  • PipPipPip
  • 110 posts
  • LocationCâmpina

Posted 14 March 2010 - 11:03

Asta stiam si eu despre null, doar ca nu inteleg care e rolul lui in anumite functii. Spre exemplu time(null) ce face? Am gasit utilizarea aceasta intr-o carte si nu e explicat si ce realizeaza.
Sau spre ex in cazul (if(f="in.txt")==NULL)? Daca deschiderea fisierului se realizeaza corect expresia respectiva ia valoarea 1? Am inteles eu corect? :unsure:

#6 XLR3204S

XLR3204S

    Veteran

  • Membri
  • PipPipPip
  • 140 posts
  • LocationIași

Posted 14 March 2010 - 11:13

@Eugen Mihalache ce zici tu este diferența dintre valorile logice, adică în ce spui tu, 0 = false; 1 = true. N-are legătură cu macro-ul NULL.

Revenind la topic, are mai multe întrebuințări, în funcție de context. Vezi Wikipedia și cplusplus.com.

#7 boboc

boboc

    Veteran

  • Membri
  • PipPipPipPip
  • 668 posts
  • Locationvalcea

Posted 14 March 2010 - 11:16

time(NULL) ofera timpul in secunde,ai aici mai multe detalii:

http://www.daniweb.c...read183432.html

este folositoare impreuna cu functia srand(time(NULL)); pentru a crea numere random,daca folosesti rand() va avea aceasi serie de nr aleatoare de fiecare data.
if(f="in.txt")==NULL verifica daca nu poate deschide acel fisier,iar intre acolade in mod normal ar urma mesajul cu eroarea.

Edited by boboc, 14 March 2010 - 11:17.


#8 boboc

boboc

    Veteran

  • Membri
  • PipPipPipPip
  • 668 posts
  • Locationvalcea

Posted 14 March 2010 - 11:20

Ca sa ibtelegi bine in general ce rol are o functie intr-un cod,verifica prototipul functiei si vezi ce face acea functie.

#9 XLR3204S

XLR3204S

    Veteran

  • Membri
  • PipPipPip
  • 140 posts
  • LocationIași

Posted 14 March 2010 - 11:24

Asta stiam si eu despre null, doar ca nu inteleg care e rolul lui in anumite functii. Spre exemplu time(null) ce face? Am gasit utilizarea aceasta intr-o carte si nu e explicat si ce realizeaza.
Sau spre ex in cazul (if(f="in.txt")==NULL)? Daca deschiderea fisierului se realizeaza corect expresia respectiva ia valoarea 1? Am inteles eu corect? :unsure:

În time(NULL), funcția time() nu poate fi chemată fără argument. Ca să nu dea eroare, i se pasează NULL și este folosită valoarea asta de către funcție. Mai multe aici: cplusplus.com. Ai mai putea face și tu un program în care să folosești doar time(). Va da eroare la compilare. Al doilea caz e cam vag.

Edited by XLR3204S, 14 March 2010 - 11:25.


#10 Andra

Andra

    Veteran

  • Membri
  • PipPipPip
  • 110 posts
  • LocationCâmpina

Posted 14 March 2010 - 11:35

În time(NULL), funcția time() nu poate fi chemată fără argument. Ca să nu dea eroare, i se pasează NULL și este folosită valoarea asta de către funcție. Mai multe aici: cplusplus.com. Ai mai putea face și tu un program în care să folosești doar time(). Va da eroare la compilare. Al doilea caz e cam vag.

Cel de-al doilea caz se refera la deschiderea unui fisier. Si intrebarea era daca deschiderea fisierului returneaza valoarea 1 daca deschiderea s-a facut cu succes.

#11 boboc

boboc

    Veteran

  • Membri
  • PipPipPipPip
  • 668 posts
  • Locationvalcea

Posted 14 March 2010 - 11:53

Syntax
#include <stdio.h>
FILE *fopen(const char *filename, const char *mode)

Description
Opens file filename and associates a stream and mode to it. Returns a stream or NULL if the function fails.

Modes
"r" "read only"
"w" "create and open for writing"
"a" "append, open or create"
"r+" "open for update, read or write"
"w+" "create for update"
"a+" "append, open or create"

Example

FILE *ptr = NULL;
char fname[] = "my_file.txt";

if ((ptr = fopen(fname, "r")) != NULL)
{
   program statement;

#12 XLR3204S

XLR3204S

    Veteran

  • Membri
  • PipPipPip
  • 140 posts
  • LocationIași

Posted 14 March 2010 - 12:10

Ca o sugestie, învață-te să te folosești de online references-urile limbajelor de programare folosite. Nimeni n-o să țină minte de pe rost 32894792837 funcții, dar un programator bun va avea în reflex folosirea documentațiilor online. Cred că ți s-ar clarifica multe aspecte dacă ai citi documentația funcțiilor în cauză.

#13 Eugen Mihalache

Eugen Mihalache

    Psihoterapeut

  • Membri
  • PipPipPipPipPip
  • 1620 posts
  • LocationBad Griesbach im Rottal

Posted 14 March 2010 - 17:54

@Eugen Mihalache ce zici tu este diferența dintre valorile logice, adică în ce spui tu, 0 = false; 1 = true. N-are legătură cu macro-ul NULL.


Într-o oare care măsură ai dreptate. Și 'macRou' ce înseamnă?


Un pic de off topic.
Dar pănă acum, din explicațiile pe tematica voastră de maisus, eu nu am înțeles care e treaba cu NULL. Link-uri pot da și eu destule de pe net. Dar așa vrea să văd pe cineva care știe să explice (ca la orbeți frate), de la cap la coadă o treabă la care crede că se pricepe. DA, documentație este destulă, numai timp să ai. Iar eu cel puțin când apelez la forum, apleze fiindcă nu am timp să mă documentez în de-aproape despre problematica mea. Iar în speranța și cu 'riscul' , să primesc o informație validă o ba, clară și să o pot practica sau nu. Mă adresez vouă. La o adică, dacă avem cărțile în față, consider că toți suntem profesioniști. Nu vreau să creez tensiune. Doamen ferește. Dar vreau să aduc la cunoștință unele idei general valabile.

Edited by Eugen Mihalache, 14 March 2010 - 17:57.


#14 XLR3204S

XLR3204S

    Veteran

  • Membri
  • PipPipPip
  • 140 posts
  • LocationIași

Posted 14 March 2010 - 18:06

Într-o oare care măsură ai dreptate. Și 'macRou' ce înseamnă?


Un pic de off topic.
Dar pănă acum, din explicațiile pe tematica voastră de maisus, eu nu am înțeles care e treaba cu NULL. Link-uri pot da și eu destule de pe net. Dar așa vrea să văd pe cineva care știe să explice (ca la orbeți frate), de la cap la coadă o treabă la care crede că se pricepe. DA, documentație este destulă, numai timp să ai. Iar eu cel puțin când apelez la forum, apleze fiindcă nu am timp să mă documentez în de-aproape despre problematica mea. Iar în speranța și cu 'riscul' , să primesc o informație validă o ba, clară și să o pot practica sau nu. Mă adresez vouă. La o adică, dacă avem cărțile în față, consider că toți suntem profesioniști. Nu vreau să creez tensiune. Doamen ferește. Dar vreau să aduc la cunoștință unele idei general valabile.

Spre exemplu time(null) ce face? Am gasit utilizarea aceasta intr-o carte si nu e explicat si ce realizeaza.

Ca o sugestie, învață-te să te folosești de online references-urile limbajelor de programare folosite. Nimeni n-o să țină minte de pe rost 32894792837 funcții, dar un programator bun va avea în reflex folosirea documentațiilor online. Cred că ți s-ar clarifica multe aspecte dacă ai citi documentația funcțiilor în cauză.

Iar acum ca să explic ca la proști (sau mă rog, unul), că acolo ne îndreptăm:
Ea a întrebat ce face time() cînd argumentul este NULL. Eu i-am dat link spre cplusplus.com. Acolo scrie, citez,

Pointer to an object of type time_t, where the time value is stored.
Alternativelly, this parameter can be a null pointer, in which case the parameter is not used, but a time_t object is still returned by the function.

Cu alte cuvinte, exact ce voia ea să știe. Ba chiar i-am spus să cheme funcția time() fără argument într-un program, și va vedea că îi dă eroare. Deci acel null pointer este macro-ul NULL. Ce am spus eu mai sus se aplică în general. Am impresia că tu cam vorbești ca să te afli în treabă, și îmi pare rău pentru tine. Sau poate ai o "schemă cognitivă" și pentru a învăța pe de rost un număr uriaș de funcții dintr-un număr de, să zicem, 5 limbaje de programare. Și îmi pare rău, dar din post-ul tău de mai sus, numai că nu vrei să creezi tensiune nu reiese...

Edited by XLR3204S, 14 March 2010 - 18:09.


#15 Eugen Mihalache

Eugen Mihalache

    Psihoterapeut

  • Membri
  • PipPipPipPipPip
  • 1620 posts
  • LocationBad Griesbach im Rottal

Posted 14 March 2010 - 19:08

Da, hai, eu prostul... întreb iar. Cum e?
Bun și NULL în fond și la urma urmei în acest macrou de 'timp' nu are statutul de 'PAUZĂ' cum am spus la început?

#16 XLR3204S

XLR3204S

    Veteran

  • Membri
  • PipPipPip
  • 140 posts
  • LocationIași

Posted 14 March 2010 - 19:40

Dacă tu spui că time(NULL) oprește ceva (fie programul, fie acel NULL anulează funcția), atunci NU, răspunsul este NU, și îl aflai cititnd ce scrie în acest link dat de mine și mai sus, pe care insiști cu vehemență să nu dai click. Acolo este dat chiar și un exemplu cu time(NULL), fiind furnizat și output-ul.

Îmi cer scuze pentru insultă, mă aprind ușor, iar de două ori am intrat în conflict pentru că post-urile îmi sunt citite printre rînduri, după cum am mai scris și în celălalt thread.

#17 boboc

boboc

    Veteran

  • Membri
  • PipPipPipPip
  • 668 posts
  • Locationvalcea

Posted 14 March 2010 - 19:47

Syntax
#include <time.h>
time_t time(time_t *t)

Description
Returns the current calendar time. If t is not NULL, the return value is also assigned to *t. Returns -1 if the time is not available.


Example

time_t current_time;
time_t time_value;

time_value = time(&current_time);

#18 Eugen Mihalache

Eugen Mihalache

    Psihoterapeut

  • Membri
  • PipPipPipPipPip
  • 1620 posts
  • LocationBad Griesbach im Rottal

Posted 18 March 2010 - 02:39

NULL - Null - Nil - void

#19 Cristian Draghici

Cristian Draghici

    Membru nou

  • Membri
  • Pip
  • 12 posts
  • LocationBucuresti

Posted 18 March 2010 - 10:08

1/ In C este acceptat doar NULL (standardul C99, 6.3.2.3):


3. An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.55) If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.

55) The macro NULL is defined in <stddef.h> (and other headers) as a null pointer constant; see 7.17.


Se poate observa dupa trecerea prin preprocesor ca NULL e inlocuit de "(void *)0":
cristi:tmp diciu$ cat test.c
#include <stdio.h>
int main()
{
	char * t1 = NULL;
}
cristi:tmp diciu$ gcc -E test.c | grep "char .* t1"
 char * t1 = ((void *)0);

2/ nil, nu Nil este echivalentul lui NULL in Objective-C.
Si nil este inlocuit tot de preprocesor:

cristi:tmp diciu$ cat test.m
#import <Cocoa/Cocoa.h>

int main()
{
	id a = nil;
}
cristi:tmp diciu$ gcc -E test.m | grep "id a.*="
 id a = ((void *)0);

3/ Intrebare initiala - la ce foloseste constructia de tip if(f="in.txt")==NULL este gresita.
Mai probabil se referea la constructia de verificare a deschiderii cu succes a unui fisier, i.e.:

        FILE * f;
        if((f=fopen("in.txt", "r")) == NULL)
                printf("Error opening file for reading");

constructia e varianta mai scurta a:
        FILE * f;
        f = fopen("in.txt", "r");
        if(f == NULL)
                printf("Error ...");

si nu are nici o legatura cu logica booleana.
Pur si simplu FILE *-ul intors de fopen este NULL atunci cand nu se poate deschide fisierul.

Varianta cea mai scurta se foloseste de faptul ca NULL e zero, si ca in C zero e evaluat false si orice non-zero e evaluat true dar in acest caz efectul if-ului se inverseaza:
        FILE * f;
        if((f=fopen("in.txt", "r")))
        {
                //daca s-a ajuns aici fisierul s-a deschis pentru ca [i]f[/i] a fost non-zero, adica non-NULL
        }


#20 Andra

Andra

    Veteran

  • Membri
  • PipPipPip
  • 110 posts
  • LocationCâmpina

Posted 18 March 2010 - 13:33

1/ In C este acceptat doar NULL (standardul C99, 6.3.2.3):


3. An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.55) If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.

55) The macro NULL is defined in <stddef.h> (and other headers) as a null pointer constant; see 7.17.


Se poate observa dupa trecerea prin preprocesor ca NULL e inlocuit de "(void *)0":

cristi:tmp diciu$ cat test.c
#include <stdio.h>
int main()
{
	char * t1 = NULL;
}
cristi:tmp diciu$ gcc -E test.c | grep "char .* t1"
 char * t1 = ((void *)0);

2/ nil, nu Nil este echivalentul lui NULL in Objective-C.
Si nil este inlocuit tot de preprocesor:

cristi:tmp diciu$ cat test.m
#import <Cocoa/Cocoa.h>

int main()
{
	id a = nil;
}
cristi:tmp diciu$ gcc -E test.m | grep "id a.*="
 id a = ((void *)0);

3/ Intrebare initiala - la ce foloseste constructia de tip if(f="in.txt")==NULL este gresita.
Mai probabil se referea la constructia de verificare a deschiderii cu succes a unui fisier, i.e.:

        FILE * f;
        if((f=fopen("in.txt", "r")) == NULL)
                printf("Error opening file for reading");

constructia e varianta mai scurta a:
        FILE * f;
        f = fopen("in.txt", "r");
        if(f == NULL)
                printf("Error ...");

si nu are nici o legatura cu logica booleana.
Pur si simplu FILE *-ul intors de fopen este NULL atunci cand nu se poate deschide fisierul.

Varianta cea mai scurta se foloseste de faptul ca NULL e zero, si ca in C zero e evaluat false si orice non-zero e evaluat true dar in acest caz efectul if-ului se inverseaza:
        FILE * f;
        if((f=fopen("in.txt", "r")))
        {
                //daca s-a ajuns aici fisierul s-a deschis pentru ca [i]f[/i] a fost non-zero, adica non-NULL
        }


Multumesc pentru lamuriri. Stiu ca gresisem codul, nu am fost atenta. Oricum am inteles ideea :D . Mersi




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users