Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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


"The only way to know there is a wall in front of you, is to run into it and smack your head against it. Then you know there is a wall and that you must overcome it"
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.


"E' facile distruggere, la vera sfida è creare!"(cit. me)

"Ricordati chi sei, non permettere a nessuno di cambiarti, non perdere mai te stesso. Farai grandi cose nella vita."(cit. me)

double penetration; //ouch
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??


"The only way to know there is a wall in front of you, is to run into it and smack your head against it. Then you know there is a wall and that you must overcome it"
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.


"E' facile distruggere, la vera sfida è creare!"(cit. me)

"Ricordati chi sei, non permettere a nessuno di cambiarti, non perdere mai te stesso. Farai grandi cose nella vita."(cit. me)

double penetration; //ouch
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


"The only way to know there is a wall in front of you, is to run into it and smack your head against it. Then you know there is a wall and that you must overcome it"
PM Quote