Lors de la définition de macros avec des chaînes littérales, il est souvent nécessaire de les concaténer pour former une nouvelle chaîne. Prenons un exemple :
#define STR1 "s" #define STR2 "1" #define STR3 STR1 ## STR2
La question se pose : est-il possible de concaténer directement STR1 et STR2 pour obtenir "s1" en utilisant une seule définition de macro ?
Traditionnellement, la concaténation de chaînes dans les macros est réalisée en utilisant l'opérateur de stringification (#). Cependant, cette approche implique de passer des arguments à une fonction macro intermédiaire.
#define CONCAT(x, y) x ## y #define STR3 CONCAT(STR1, STR2)
Pour le cas spécifique de la concaténation de littéraux de chaîne, une approche simplifiée existe. En omettant l'opérateur de stringification, nous pouvons directement concaténer les chaînes :
#define STR3 STR1 STR2
Cela se développe en :
#define STR3 "s" "1"
En langage C, juxtaposer des chaînes avec des espaces (comme dans "s" "1") équivaut à avoir une seule chaîne "s1". Par conséquent, cette méthode simplifiée fournit un moyen direct de concaténer des littéraux de chaîne dans les macros C/C.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!