#ifdef fa parte dello standard, #if defined no. Il vantaggio di #if defined è che puoi fare cose del tipo:
al posto di:codice:#if defined(PIPPO) && defined(PLUTO) // andiamo a topolinia #endif
ma in genere non è portabile.codice:#ifdef PIPPO #ifdef PLUTO // andiamo a topolinia #endif #endif
Il giochino del:
si applica ad header che possono essere inclusi sia in C che in C++. Praticamente quando e' incluso in un file C++ si dice al compilatore: hey guarda che quello che c'e' scritto nel blocco extern "C" deve essere capito anche da un eventuale includente in C.codice:#ifdef __cplusplus extern "C" { #endif

Rispondi quotando