Discussione:
Direttive #ifndef #define ecc.
(troppo vecchio per rispondere)
the_knight
2006-01-13 13:03:37 UTC
Permalink
1) Ciao, mi serviva un aiuto. Quando si crea un file .h a cosa serve (e se è necessario) mettere all'inizio del file le direttiv

#ifndef NOMEFILE_H
#define NOMEFILE_H

e poi alla fin

#endi

2) Ho visto che a volte alcuni mettono anch

#if (!defined

o qualcosa del genere, all'inizio del file. Scusate se le mie domande possono risultare banali, pero mi servirebbe una delucidazione perchè sono a proprio a digiuno di queste nuove (almeno per me) direttive. Grazie in anticipo a tutti e spero di poter contare sul vostro aiuto per altri eventuali dubbi o chiarimenti

--
the_knight

-----------------------------------------------------------------------
View this thread: http://www.itsistemi.net/viewtopic-754698.htm

Inviato via http://www.itsistemi.ne
Antonio 6sette
2006-01-13 15:09:54 UTC
Permalink
Post by the_knight
1) Ciao, mi serviva un aiuto. Quando si crea un file .h a cosa
serve (e se è necessario) mettere all'inizio del file le direttive
#ifndef NOMEFILE_H_
#define NOMEFILE_H_
e poi alla fine
#endif
questo serve ad evitare di includere piu' volte il contenuto dell'header
file, altrimenti avresti una serie di warning ed errori in fase di
compilazione ... quando "passa" la prima volta, il preprocessore NON
trova definito NOMEFILE_H_, lo definisce e include il contenuto del file ...
alla seconda "passata", lo trova gia' definito e salta direttamente all'
endif e non reinclude il contenuto del file header ...

detto a parole mie e molto "terra terra" ... niente di troppo "tecnico" ;-))

ciao ...
--
#include <stdio.h>
int main(void){char c[]={10,65,110,116,111,110,105,111,32,98,97,114,98,111,110,
101,32,60,104,105,110,100,101,109,105,116,64,116,105,115,99,97,108,105,110,101,
116,46,105,116,62,10,10,0};printf("%s",c);return 0;}
jmc
2006-01-14 12:46:45 UTC
Permalink
Post by Antonio 6sette
questo serve ad evitare di includere piu' volte il contenuto dell'header
file, altrimenti avresti una serie di warning ed errori in fase di
compilazione ... quando "passa" la prima volta, il preprocessore NON
trova definito NOMEFILE_H_, lo definisce e include il contenuto del file ...
alla seconda "passata", lo trova gia' definito e salta direttamente all'
endif e non reinclude il contenuto del file header ...
detto a parole mie e molto "terra terra" ... niente di troppo "tecnico" ;-))
ciao ...
Confermo. Quelli sono soltanto dei "preprocessor directives", delle
indicazioni che dai al preprocessore del compilatore. In particolare,
#if ed #endif valutano una condizione che, se vera, fa includere il
codice seguente nella compilazione, altrimenti lo tralascia.

Come hai giustamente notato, ad #ifdef si può sostituire un #if con
defined:

#if defined(MY_HEADER_H)
// qui il codice
#endif

Un altro uso degli #if è quello di commentare larghe parti di codice -
cosa che però io cerco di evitare, perchè non tutti gli editor ne
evidenziano il comportamento come fa VIM e perché il C e il C++ hanno
già i blocchi di commenti - in questo modo:

#if 0
// codice che non sarà compilato
#endif

Questo perché 0 viene sempre considerato come "falso" - qualsiasi
altro valore non "nullo" avrebbe significato "vero".

Ciao. ;)

the_knight
2006-01-14 10:18:13 UTC
Permalink
Grazie...gentilissimo

--
the_knight

-----------------------------------------------------------------------
View this thread: http://www.itsistemi.net/viewtopic-754698.htm

Inviato via http://www.itsistemi.ne
Loading...