152 votes

Pourquoi #define TRUE (1==1) dans une macro booléenne en C au lieu de simplement indiquer 1 ?

J'ai vu des définitions en C

#define TRUE (1==1)
#define FALSE (!TRUE)

Est-ce nécessaire ? Quel est l'avantage de définir simplement VRAI comme 1, et FAUX comme 0 ?

3voto

Jefffrey Points 31698

La différence pratique est nulle. 0 est évalué à false et 1 est évalué à true . Le fait que vous utilisiez un expression booléenne ( 1 == 1 ) ou 1 pour définir true ne fait pas de différence. Les deux sont évalués à int .

Remarquez que la bibliothèque standard C fournit un en-tête spécifique pour définir les booléens : stdbool.h .

3voto

capiggue Points 41

Nous ne connaissons pas la valeur exacte à laquelle TRUE est égal et les compilateurs peuvent avoir leurs propres définitions. Donc ce que vous privode est d'utiliser celle interne du compilateur pour la définition. Ceci n'est pas toujours nécessaire si vous avez de bonnes habitudes de programmation mais peut éviter des problèmes pour un mauvais style de codage, par exemple :

si ( (a > b) == VRAI)

Cela peut être un désastre si vous définissez manuellement TRUE comme 1, alors que la valeur interne de TRUE est une autre.

2voto

Sabashan Ragavan Points 578
  1. Élément de liste

Typiquement, dans le langage de programmation C, 1 est défini comme vrai et 0 est défini comme faux. C'est pourquoi vous voyez souvent ce qui suit :

#define TRUE 1 
#define FALSE 0

Cependant, tout nombre différent de 0 sera également évalué comme vrai dans une déclaration conditionnelle. Par conséquent, en utilisant la formule ci-dessous :

#define TRUE (1==1)
#define FALSE (!TRUE)

Vous pouvez simplement montrer explicitement que vous essayez de jouer la sécurité en rendant faux égal à ce qui n'est pas vrai.

Prograide.com

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.

Powered by:

X