Non, #define
n'est pas interdite. L'utilisation abusive de #define
Cependant, il peut être mal vu.
Par exemple, vous pouvez utiliser
#define DEBUG
dans votre code afin que, plus tard, vous puissiez désigner des parties de votre code pour la compilation conditionnelle à l'aide de la fonction #ifdef DEBUG
à des fins de débogage uniquement. Je ne pense pas qu'une personne saine d'esprit veuille interdire une telle chose. Les macros définies à l'aide de #define
sont aussi largement utilisés dans les programmes portables, pour activer/désactiver la compilation du code spécifique à la plate-forme.
Cependant, si vous utilisez quelque chose comme
#define PI 3.141592653589793
votre professeur peut, à juste titre, vous faire remarquer qu'il est bien mieux de déclarer PI
comme une constante avec le type approprié, par exemple,
const double PI = 3.141592653589793;
car il permet au compilateur d'effectuer une vérification de type lorsque PI
est utilisé.
De même (comme l'a mentionné John Bode ci-dessus), l'utilisation de macros de type fonction peut être désapprouvée, notamment en C++ où les modèles peuvent être utilisés. Ainsi, au lieu de
#define SQ(X) ((X)*(X))
envisager d'utiliser
double SQ(double X) { return X * X; }
ou, en C++, mieux encore,
template <typename T>T SQ(T X) { return X * X; }
Une fois encore, l'idée est qu'en utilisant les fonctionnalités du langage au lieu du préprocesseur, vous permettez au compilateur de vérifier le type et aussi (éventuellement) de générer un meilleur code.
Une fois que vous aurez suffisamment d'expérience en matière de codage, vous saurez exactement quand il est approprié d'utiliser #define
. En attendant, je pense que c'est une bonne idée que votre professeur impose certaines règles et normes de codage, mais il est préférable qu'il en connaisse lui-même les raisons et soit en mesure de les expliquer. Une interdiction générale de #define
est absurde.