Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: [C/C++] Valore di NULL

  1. #1
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281

    [C/C++] Valore di NULL

    Ciao a tutti . . . Pochi giorni fa ho letto che il valore della macro NULL non è sempre 0 ma puo assumere anche altri valori (ad esempio su alcuni sistemi è definito con il valore -1 ). Ora la mia domanda è: E' vero ???
    No perchè io, quando devo verificare se un puntatore punta a qualcosa, ho l' abitudine di trattare il puntatore come un bool invece che comparare il puntatore con NULL ovvero utilizzo questa espressione
    codice:
    if ( pointer )
    al posto di quest' altra
    codice:
    if ( pointer != NULL )
    Quindi, se quel che ho letto è vero , dovrei abituarmi a usare la seconda notazione per rendere il codice portabile (anche se per ora programmo su un solo sistema, ma non si mai) o mi sbaglio???
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  2. #2
    Avendo sempre lavorato su Windows e Linux su architetture x86 e x86_64 non ho mai visto NULL definito a valori differenti da 0, tuttavia quello che dici è vero, tecnicamente NULL può essere definito come qualunque valore. Per questo anch'io mi sono abituato ad usare la seconda notazione che hai scritto, che ha anche il vantaggio di rendere subito chiaro che si sta lavorando su un puntatore, e non su un intero, un booleano o qualunque altro tipo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Mah ... personalmente non credo che la NULL possa essere diversa da 0 in quanto e' il valore che e' stato scelto dai produttori di hardware come indirizzo non accedibile (per cui le CPU generano una exception).

    Non penso sia una buona idea cambiarne il significato ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Originariamente inviato da oregon
    Mah ... personalmente non credo che la NULL possa essere diversa da 0 in quanto e' il valore che e' stato scelto dai produttori di hardware come indirizzo non accessibile (per cui le CPU generano una exception).
    Io ho sempre saputo che sui sistemi dotati di memoria virtuale le eccezioni di memoria dipendono da come il sistema operativo stabilisce che debba essere lo spazio di indirizzi virtuale del processo; nello specifico, Windows ad esempio stabilisce che i primi 64 KB di memoria sono inaccessibili, ed è per questo che qualunque tentativo di accedere a memoria tra 0x00000000 e 0x00010000 genera un'eccezione hardware di protezione della memoria. Se ben ricordo quanto ho studiato sul Tanenbaum, in generale il sistema operativo per definire una zona di memoria non accessibile deve semplicemente sollevare un'eccezione di memoria nel gestore dei page fault quando vede che l'indirizzo appartiene ad una zona protetta.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Siccome utilizzo una notazione simil ungara, non ho problemi nel riconoscere il tipo di dato, però se c' è una possibità (seppur minima da quel che ho capito) che il null pointer sia un valore diverso da 0, è meglio comparare un puntatore con NULL che trattarlo come un bool . . . grazie mille
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    #define NULL ((void*)0)
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Originariamente inviato da KrOW
    Siccome utilizzo una notazione simil ungara,
    Ungherese, intendi? Quella capace di rendere illeggibile qualunque blocco di codice, anche il più semplice?
    non ho problemi nel riconoscere il tipo di dato, però se c' è una possibità (seppur minima da quel che ho capito) che il null pointer sia un valore diverso da 0, è meglio comparare un puntatore con NULL che trattarlo come un bool . . .
    In generale si tratta più di un problema di chiarezza e correttezza semantica.
    Originariamente inviato da XWolverineX
    #define NULL ((void*)0)
    Questa vale solo in C, in C++ la questione è più complicata, dal momento che un void * andrebbe castato esplicitamente al tipo del puntatore con cui si effettua il confronto, per cui si è utilizzato per un po' il semplice zero, e ora finalmente hanno deciso di usare nullptr (un po' di spiegazioni a proposito).
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Ecco, trovato; secondo il Rector-Newcomer (Win32 programming, Addison-Wesley, 1997, pagg. 31-32), che a sua volta cita lo standard C, "[The macro] NULL expands to an implementation-defined null pointer constant".
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da MItaly
    per cui si è utilizzato per un po' il semplice zero, e ora finalmente hanno deciso di usare nullptr (un po' di spiegazioni a proposito).
    Grazie del link, molto interessante
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  10. #10
    Prego, di nulla!
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.