Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - #ifndef e #define what??
Forum - C/C++ - #ifndef e #define what??

Avatar
kaig (Normal User)
Newbie


Messaggi: 5
Iscritto: 20/05/2009

Segnala al moderatore
Postato alle 16:26
Mercoledì, 20/05/2009
Innanzi tutto ciao a tutti..questo è il mio primo messaggio sul forum!
Come si puo' capire dal titolo non riesco a capire l'uso di queste direttive..
:-?:-? Qualcuno mi potrebbe dire esattamente a cosa servono? grazie

PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 17:52
Mercoledì, 20/05/2009
#define definisce una costante e #ifndef controlla se una costante non è definita.
Di solito si usano per evitare di includere due volte lo stesso header (.h)

esempio:

poniamo di avere due file game.cpp e game.h

in game.h scriverò
Codice sorgente - presumibilmente C/C++

  1. #ifndef game_h    //Se game_h non è definito
  2. #define game_h    //definisci game_h altrimenti salta a endif
  3.  
  4. //Codice
  5.  
  6. #endif



Questo per evitare che in game.cpp richiami due volte lo stesso header:

la prima volta viene definito game_h ma la seconda volta #ifndef salta tutto il codice perchè game_h è già definto.

PM Quote
Avatar
kaig (Normal User)
Newbie


Messaggi: 5
Iscritto: 20/05/2009

Segnala al moderatore
Postato alle 20:51
Mercoledì, 20/05/2009
oK:k: grazie...credo di aver capito...ma:
se, ad esempio, mettiamo che abbia piu' file sorgenti e devo includerci l'header in ognuno, questo permette di definire la costante una sola volta??

PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 6:00
Giovedì, 21/05/2009
No, la costante sarà definita per ogni file .cpp icluda l'header solo che non ce ne saranno mai due per ogni file:

se io ho questi file:
A.cpp
H1.h
H2.h


se io faccio in H2.h:
#include "H1.h"

e poi in A.cpp:
#include "H1.h"
#include "H2.h"

Ci sarebbe un errore di ridefinizione mentre con le costanti #define e #ifndef non avviene.
Diciamo che il compilatore unisce i tre file che diventano un solo file .obj
Quindi la costante viene definita solo per un file cpp e puoi tranquillamente utilizzarla per altri file.

PM Quote
Avatar
kaig (Normal User)
Newbie


Messaggi: 5
Iscritto: 20/05/2009

Segnala al moderatore
Postato alle 6:26
Giovedì, 21/05/2009
ora mi e' chiaro!...:rotfl::rotfl:
grazie

PM Quote