C'est une question simple mais pourquoi utiliser quelqu'un #define pour définir des constantes?
Quelle est la différence entre
#define sum 1
et const int sum = 1;
Merci d'avance`
C'est une question simple mais pourquoi utiliser quelqu'un #define pour définir des constantes?
Quelle est la différence entre
#define sum 1
et const int sum = 1;
Merci d'avance`
#define
a de nombreuses applications différentes, mais votre question semble être au sujet d'une application spécifique: la définition nommé constantes.
En C++ il y a rarement une raison d'utiliser #define
pour définir nommé constantes.
#define
est normalement largement utilisé dans le code C, depuis le langage C est très différent de C++ quand il s'agit de définir des constantes. En bref, const int
objets ne sont pas constantes en C, ce qui signifie que C le principal moyen de définir une véritable constante est d'utiliser #define
. (Aussi, pour int
des constantes, on peut utiliser les énumérations).
Non il ne faut pas!
En fait, On devrait préférer const int sum = 1;
sur #define sum 1
pour un certain nombre de raisons:
Étendue En Fonction De Mécanisme:
#define
s ne respectent pas les étendues donc il n'y a aucun moyen de créer une classe étendue de l'espace de noms. Tout const variables peut être portée dans les classes.
En évitant Bizarre de magique pendant les erreurs de compilation:
Si vous utilisez #define
ceux-ci sont remplacés par le pré-processeur au moment de la précompilation Donc, si vous recevez une erreur lors de la compilation, il sera source de confusion car le message d'erreur l'habitude de consulter le nom de la macro, mais la valeur et il apparaîtra une soudaine valeur, et l'on perdrait beaucoup de temps de suivi vers le bas dans le code.
La facilité de Débogage:
Aussi pour les mêmes raisons mentionnées dans le #2, tandis que le débogage #define
fournirait aucune aide vraiment.
Ainsi, pour éviter des situations ci-dessus const
sera un meilleur choix.
Pour l'exemple que vous venez de donner, je voudrais l'utiliser normalement const. Sauf, bien entendu, le #define peut être utilisé pour la compilation conditionnelle ailleurs:
#if SOME_DEFINE == 1
// Conditional code
#endif
C'est quelque chose que vous ne pouvez pas faire avec une const. Si vous n'avez pas besoin de la valeur pour être accessible à partir du préprocesseur, je dirais que l'utilisation const moins qu'il y a une raison pour laquelle ce n'est pas possible. Il y a quelques trucs à ce sujet dans le C++ FAQ lite, où ils soulignent à juste titre que juste parce que le préprocesseur est "mal", il ne signifie pas que vous n'aurez jamais besoin d'elle.
#define
est nécessaire pour faire des choses comme l'inclusion des gardes de travail, parce que le C++ n'est pas un véritable module de système d'importation.
#define
provoque un littéral textuelle de substitution. Le préprocesseur comprend la façon de marquer le code source, mais n'ont pas la moindre idée de ce que tout cela signifie réellement. Lorsque vous écrivez #define sum 1
, le préprocesseur va sur votre code et un look pour chaque instance du jeton sum
et le remplace par le jeton 1
.
Cela a une variété de limites: #define sq(x) x * x
ne fonctionnera pas bien si vous l'utilisez comme sq(3+3)
; et à l'aide de #define
pour une constante ne respecte pas la portée d'une quelconque manière, ni le fait d'associer toute sorte de type de la constante. Toutefois, #define
peut être utilisé (en particulier en combinaison avec certains autres trucs comme l' #
et ##
préprocesseur opérateurs) pour faire un peu de magie qui par ailleurs n'est pas possible (sauf manuellement en faisant ce que le préprocesseur n').
Essayez toujours d'utiliser "const int" plutôt que #define.
Utilisez #define, uniquement lorsque votre code de préprocesseur peut être lu par un autre outil et qu'il est plus facile de l'utiliser avec le préprocesseur plutôt que d'analyser le langage.
C'est aussi le seul moyen de définir quelque chose à vérifier ultérieurement par # if / # else / # endif
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.