Originariamente inviato da zorz
1.non ho conosco la sintassi '#ifndef ' e '#endif'..perchè <<..ti permette di evitare inclusioni multiple del file header.>>??cosa intendi??
Ti permette di evitare inclusioni multiple perchè se hai già incluso un file (o hai già definito ad esempio una costante), il codice compreso tra #ifndef (che sta per: se non definito) e #endif, non viene eseguito. Si usa spesso per definire le macro (costanti).
Esempio:
#ifndef TRUE (se TRUE non è stato definito....)
#define TRUE 1 (definisci/poni TRUE = 1)
#endif

Se TRUE aveva già un altro valore, non assumerà valore 1, perchè la parte #define TRUE 1 non verrà eseguita. In C e in C++ è convenzione usare delle macro (definite con #define) al posto di valori numerici (TRUE al posto di 1).

3.<<Nel momento in cui i file vengono compilati in file oggetto, ok, nessun problema. Quando invece entra in azione il Linker, si trova a dover linkare UNA delle 2 variabili che sono state dichiarate.>>..dunque..che cos'è il LINKER e la storia delle due variabili..??
Come hai visto, in C e C++ vengono messi insieme file sorgenti (.c o .cpp) in cui tu metti il tuo codice, assieme a file header che contengono funzioni di libreria predefinite, oppure, file header in cui tu stesso hai definito del codice. Il processo che combina il file oggetto prodotto dal tuo sorgente e i file header per arrivare a generare un file eseguibile è chiamato linking, cioè è eseguito da un programma chiamato linker. Come ti ha detto akiross se definisci delle variabili in un header rischi di richiamare una variabile con lo stesso nome più volte, succede che il linker vede due variabili uguali, non capisce cosa deve fare e si ferma.

ciao.