#ifndef INT64_C #define INT64_C(c) (c ## LL) #define UINT64_C(c) (c ## ULL) #endif What does ## mean in C? Is that a placeholder or function?
4 Réponses :
On appelle le opérateur de collage de jeton , il concaténe des jetons de sorte que < Code> 123313 ## ll code> devient Il y a aussi un opérateur de stringification 123313ll code> pendant le prétraitement. P>
# Code>, qui convertit #name code> dans "nom" code>. p>
Non, Par exemple, si vous passez Le résultat produit par le préprocesseur serait équivalent à l'écriture p> L'idée de ces macros consiste à faire de la constance signée et non signée dans le code un peu plus : une valeur qui ressemble à ## code> n'est pas un espace réservé pour une fonction, il s'agit d'un opérateur de colle de jeton. Il n'est valide que dans les macros de préprocesseur (avec ou sans paramètres). Il produit une concaténation de ses côtés gauche et droit. intz_c code> une valeur de 123 code> p> intz3_c (123) code> peut être un peu plus lisible que l'équivalent 123ll code>. C'est définitivement une forte amélioration par rapport à son autre équivalent 123ll code>, qui ressemble à un nombre complètement différent. P> p>
SO mais faites attention, il est fait dans la phase de pré-traitement afin que ce ne soit pas comme générera ## code> signifie concaténer deux jetons. (c ## ll) code> sera pré-traité à CLL code>. p> strcat code>. p> malade code> au lieu de 3ll code>. p> p>
Deux jetons, pas deux cordes.
Comme d'autres personnes mentionnées, ## code> colle deux jetons ensemble. #define INT64_C(c) (c ## L)
Je recommande
le langage de programmation C CODE> Chapitre 4 Section 11, et vous saurez tout sur les usages macro@Jens considère
intz3_c (2 + 2) * 100 code> - ici, pour obtenir le résultat attendu 400, les parenthèses sont nécessaires@Anatolyg Tu as raison, je n'y pensais pas. Bonne prise! Commentaire supprimé.