Comme mentionné dans plusieurs de mes questions précédentes, je travaille via K&R et je suis actuellement dans le préprocesseur. L'une des choses les plus intéressantes - quelque chose que je n'avais jamais su auparavant lors de mes précédentes tentatives pour apprendre C - est l' ##
opérateur du préprocesseur. Selon K&R:
L'opérateur de préprocesseur
##
fournit un moyen de concaténer des arguments réels pendant le développement de macro. Si un paramètre dans le texte de remplacement est adjacent à a##
, le paramètre est remplacé par l'argument réel, l'##
espace blanc et l'espace qui l'entoure sont supprimés et le résultat est à nouveau analysé. Par exemple, la macropaste
concatène ses deux arguments:
#define paste(front, back) front ## back
paste(name, 1)
crée ainsi le jetonname1
.
Comment et pourquoi quelqu'un utiliserait-il cela dans le monde réel? Quels sont des exemples pratiques de son utilisation et y a-t-il des pièges à considérer?
std::wstring BuildDate = WIDEN(__DATE__) L" " WIDEN(__TIME__);
et créer implicitement la chaîne entière à la fois.