Je ne connais pas l'Objective-C, donc ma réponse consistera à comparer l'utilisation du préprocesseur en C et C++.
Le préprocesseur était à l'origine nécessaire pour le C pour plusieurs raisons. Si je me souviens bien, à l'origine le C n'avait pas de constantes, donc #define
était nécessaire pour éviter les chiffres magiques. Avant 1999, le C n'avait pas de fonctions en ligne, donc encore une fois #define
a été utilisé pour créer des macros ou des "pseudo-fonctions" afin d'économiser la surcharge d'un appel de fonction, tout en gardant le code structuré. Le C ne dispose pas non plus de polymorphisme au moment de l'exécution ou de la compilation. #ifdef
s étaient nécessaires pour la compilation conditionnelle. Les compilateurs n'étaient généralement pas assez intelligents pour optimiser le code inaccessible, donc, encore une fois, #ifdef
ont été utilisés pour insérer du code de débogage ou de diagnostic.
L'utilisation du préprocesseur en C++ est un retour en arrière vers le C, et est généralement désapprouvée. Les caractéristiques du langage, telles que les constantes, les fonctions en ligne et les modèles, peuvent être utilisées dans la plupart des situations où, en C, vous auriez utilisé le préprocesseur.
Les quelques cas où l'utilisation d'un préprocesseur en C++ est acceptable ou même nécessaire incluent les gardes pour les fichiers d'en-tête, afin d'éviter que le même en-tête soit inclus plusieurs fois, #ifdef __cplusplus
d'utiliser le même en-tête pour le C et le C++, __FILE__
y __LINE__
pour l'exploitation forestière, et quelques autres.
Le préprocesseur est également souvent utilisé pour les définitions spécifiques à la plate-forme, bien que Les pièges du C++ Stephen Dewhurst conseille d'avoir des répertoires d'inclusion séparés pour les définitions spécifiques à la plate-forme, et de les utiliser dans des configurations de construction séparées pour chaque plate-forme.