Plusieurs caractères dans une constante de caractère
Certains compilateurs C permis à plusieurs caractères dans un caractère constant.
Cela signifie que le fait d'écrire " oui " au lieu de "oui" peut passer inaperçue.
Source: C pièges et les embûches
Quelqu'un peut-il donner un exemple où plusieurs personnages sont autorisés dans une constante de caractère?
source d'informationauteur Chankey Pathak | 2011-08-04
Vous devez vous connecter pour publier un commentaire.
Que le Code de Singe cité, elle est définie par l'implémentation et la mise en œuvre varie, il n'est pas juste un gros-boutiste/little-endian et le jeu de caractères de la différence. J'ai testé quatre implémentations (tout en utilisant l'ASCII) avec le programme
et j'ai eu quatre différents résultats
Big endian (AIX, la PUISSANCE, le compilateur IBM)
Big endian (Solaris Sparc, SUN compilateur)
Little endian (Linux x86_64, gcc)
Little endian (Solaris, x86_64, Soleil compilateur)
Vous pouvez l'utiliser dans une instruction case, je suppose, mais je ne le recommande pas.
'yes'
est un multicaractère constante. Son type estint
et sa valeur est dépendant de l'implémentation. Donc comme vous l'avez déjà dit, c'est le compilateur.donc
int foo = 'yes';
BRAS, la section 2.5.2, page 9:
Plus tard, sur la même page:
et
Citant l'ANSI C spécification (à qui C++ fait un certain effort pour être compatible):
Multi-caractères constantes sont permis dans tous les contextes où un seul constantes de caractères sont autorisés.
Pour savoir où ils avaient effectivement être utilisé, j'ai vu du code qui utilise le multi-constantes de caractère pour créer lisible valeurs uniques. Par exemple, en supposant que l'int est de 4 octets, 'ABCD" et "EFGH" sont susceptibles d'être distinctes. (Ce n'est pas garanti par la langue; la mise en œuvre de la cartographie, mais il n'a pas besoin d'être raisonnable.) Et en supposant que raisonnable de cartographie, vous verrez probablement des "ABCD" ou "EFGH" dans le code de l'objet. Pas la meilleure idée du monde, mais il ne peut fonctionner que si vous ne vous souciez pas beaucoup au sujet de la portabilité.
D'ailleurs, tous conforme compilateurs C support multi-constantes de caractères (par définition; un compilateur qui ne les supporte pas est non-conforme).