#define max(a, b) \ a < b ? b : a

Fermé
NA31VA - 10 juin 2014 à 13:39
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 10 juin 2014 à 21:36
Bonjour,

Je suis débutant en C++, et j'ai vu un début de code commençant par

#define max(a, b) \
a < b ? b : a
Je veux juste savoir à quoi cela peut servir... je ne sais pas ce que
#define 
signifie, ni
 max(a,b)
ou encore
a<b ? b:a
(les deux petits points et le point d'interrogation, jamais vu ça avant...).

voilà! Merci beaucoup si vous tenter de m'aider!

2 réponses

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
10 juin 2014 à 14:17
Bonjour NA31VA,

En C
#define
est une directive destinée au pré-processeur, qui intervient en amont de la phase de compilation.

Le terme qui suit est un identificateur de macro.

Les termes qui suivent l'identificateur de la macro sont les termes que le pré-processeur met à la place de l'identificateur de macro, avant la phase de compilation.

Lorsque le nom de macro est suivi de parenthèses à la manière d'une fonction avec des arguments, la macro traite ces arguments.

Donc
max(a, b)
n'est pas une fonction, mais une macro, lorsque le préprocesseur trouve un code de la forme
max(12, 5)
, il le remplace par
12 < 5 ? 5 : 12
.

Note que pour éviter les mauvaises surprises lors des substitutions, il vaut mieux faire usage des parenthèses.

Le standard donne cet exemple :

#define max(a, b) ((a) > (b) ? (a) : (b))


qui est beaucoup plus sécurisé.

Quand à la construction
?:
c'est une expression conditionnelle utilisant l'opérateur conditionnel ternaire du C.

Son fonctionnement est notamment expliqué là : http://www.ai.univ-paris8.fr/~jk/C/cours3/node27.html

C'est une sorte de if / then / else en plus compact.


Dal
4
Kheeps Messages postés 109 Date d'inscription mercredi 15 mai 2013 Statut Membre Dernière intervention 24 juin 2014 10
10 juin 2014 à 13:45
Bonjour,

J'ai fait du C++ en cours y'a un moment et je ne suis pas sur de ce que je vais avancé, mais ca peut être une piste ^^

Le #define semble être une bibliotheque, ce qu'on utilise souvent a chaque début de programme (pas sur)
Ensuite le max (a,b) c'est une fonction qui prend le max (plus grande valeur) de la variable a et de la variable b.

Ensuite le a<b ? a:b, comme toi, le point d'interrogation ca ne me dit rien du tout ^^'
-4
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
10 juin 2014 à 21:36
Non, #define n'est pas du tout une bibliothèque... Ce n'est même pas une fonction, mais une macro.
Pour le reste, voir la réponse de [Dal] :-)
0