original in en Guido Socher
en to fr Jean-Etienne Poirrier
Java est connu pour son « écrit une fois, jamais fonctionnel » et, en C, c'est plutôt « écrit une fois, compilé et toujours fonctionnel ». En d'autres mots, du code C est très portable et la beauté est aussi que vous pouvez avoir des déclarations pré-processeur #ifdef pour faire la distinction entre les différentes plate-formes. De cette manière, vous avez juste une pièce de code qui peut être recompilé sur différents systèmes, même sans avoir à lancer un script d'auto-configuration avant la compilation.
Voici un exemple :
#ifdef sun // solaris static char *port="/dev/ttya"; #endif #ifdef linux // linux static char *port="/dev/ttyS0"; #endif
La question est simplement : comment savez-vous qu'il y a un #define linux ou __linux__ ? ... et quels autre #defines avons-nous ?
C'est assez simple. Lancez juste cette commande et vous obtiendrez une liste des déclarations #define prédéfinies :
touch /tmp/foo.h ; cpp -dM /tmp/foo.h
C'est tout.