Newsgroup: it.comp.lang.c++
Titolo: A che serve #ifdef???

Ciao a tutti, ho seguito 2 corsi di c++ all'università e sono arrivato a uan
preparazione decente ( Alberi, liste, tabelle hash ) ma c'è una cosa che mi
sono sempre chiesto...
A che serve #ifdef?????
Grazie
Vincenzo

 A che serve #ifdef?????
quando in c/c++  vedi un # seguito da qualcosa,significa che quella e' una
direttiva del precompilatore. In particolare la direttiva #ifdef implica
l'inclusione o meno nell' unita' di compilazione di alcune parti di codice:
#ifdef    __GNUC__
printf("Hello World\n")
#endif
Questa parte di codice e' compilata soltanto se il compilatore e' GNU.
Ivan Molella

 ha scritto nel messaggio
news:2Bu78.29513$3J1.8...@news2.tin.it...

Le direttive #ifdef e #ifndef vengono usate nella compilazione condizionale.
L'utilizzo pratico della compilazione condizionale si ha principalmente in
due casi: se ad esempio stai scrivendo una libreria di grandi dimensioni, è
possibile che alcuni moduli vengano inclusi più di una volta nello stesso
file. Per ovviare al problema si usa #ifndef in testa ad un header file, ad
esempio:
/* file1.h */
#ifndef FILE1
#define FILE1
...
#endif
#ifdef può essere usata in fase di debug, per compilare parti di codice che
hanno il solo scopo di verificare lo stato del programma in determinate zone
che ti interessano:
/* file.cpp */
#define DEF1
...
#ifdef DEF1
...
#endif
la parte di codice tra #ifdef e #endif viene compilata solo se c'è la riga
"#define DEF1" in testa al file, oppure se è presente in uno dei file di
inclusione; una volta fatto il debug, basta semplicemente commentarla per
evitare che queste parti vengano compilate.
Ciao,
Cecco

 Questa parte di codice e' compilata soltanto se il compilatore e' GNU.
Sei sicuro ? Sicuro sicuro ?
Ciao
Gaetano
--
#exclude <windows>
#include <CSRSS>
printf("\t\t\b\b\b\b\b\b");.
printf("\t\t\b\b\b\b\b\b");

Sei sicuro ? Sicuro sicuro ?
basterebbe mettere prima di #ifdef __GNUC__
#ifndef __GNUC__
	#define __GNUC__
#endif
e lo compilano tutti, incluso gnu c

 e lo compilano tutti, incluso gnu c
BINGO


 BINGO
peccato che il nome __GNUC__ e` riservato agli implementatori...
Questo non toglie che io posso scrivere un compilatore con la macro 
__GNUC__ predefinita anche se il mio compilatore non e` gnu.
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

#endif
Certo che volete farvi del male... tutti i compilatori inettano le
loro macro nella compilazione per permettere di identificare la
versione del compilatore e magari in base alla presenza di qualche non
conformità é utile averle per compilare codice differente a seconda
del compiler usato. Se vi mettete a barare la cosa non ha più senso.
Il Ghenio
---------
// TODO: Place your ass here

 __GNUC__ predefinita anche se il mio compilatore non e` gnu.
Ovviamente, ma io direi che e' riservata ogni cosa che inizi con __ .


 Ovviamente, ma io direi che e' riservata ogni cosa che inizi con __ .
Con _ seguito da _ o maiuscola, piu' esattamente.  Identifiers
inizianti per _ seguito da minuscola o numero sono riservati nel
global scope.
Vedi: 
http://oakroadsystems.com/tech/cppredef.htm
 .
-- 
Maurizio Loreti  - Linux Is Not UniX -  
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

 Ovviamente, ma io direi che e' riservata ogni cosa che inizi con __ .
a essere precisi e` riservato ogni nome che contiene __. Ad esempio, 
Antonio__Cuni e` riservato.


 ciao Anto
No.

 No.
Si.
Lo standard (17.4.3.1.2) vietai nomi che contengono due underscore
consecutivi:
  Each name that contains a double underscore (__) or begins with an
  underscore followed by an uppercase letter is  reserved  to the
  implementation for any use.
        Mauro