Pour C, le préprocesseur est clairement là pour pallier aux
faiblesses du langage (regardez
/usr/src/linux/include/linux/list.h pour une oeuvre d'art).
(En C, la réutilisation se fait normalement plutôt avec des
fonctions.)
Je pense que cet exemple, certe un peu fouilli, ne mets pas tellement en
lumière les désavantages du préprocessing. Mais comme je le disais avant, pour
ce qui concerne le C je ne suis pas sûr que le préprocessing au dela des ifdef
et des includes soit un avantage majeur dans la clarté du langage.
La compilation conditionnelle est un avantage indéniable, mais l'utilisation de
macros pour définir des 'fonctions' me semble aussi dangereux que la mauvaise
utilisation des classes template en C++ ...