Buongiorno a tutti.
Curiosando in vari sorgenti C e C++, ho notato l'uso della direttiva #ifdef. Ne ho compreso la funzionalità, però non sò ancora quale macro un compilatore può accettare per, ad esempio, verificare che una data libreria esista e compilare il codice sorgente che la utilizza, oppure per inserire il supporto a vari sistemi operativi. Un codice sorgente riportava le righe seguenti:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#ifdef STDC_HEADERS
#include <stdlib.h>
#include <string.h>
#endif
Non sò se sia la sezione del forum adatta, però mi chiedo: le macro di #ifdef sono definite dal compilatore, dal linguaggio di programmazione o dal programmatore stesso? Se sono definite dal compilatore, c'è una differenza tra i vari compilatori (Visual Studio, Borland-C++, GCC, ...) nella definizione di tali macro e dove posso trovarle (ho cercato nella documentazione dei compilatori, ma non ho trovano un bel niente)?
Ringrazio in anticipo per le eventuali risposte.