89 votes

Pourquoi le caractère 'A' serait-il comparé à 0x41?

Je regardais du code C ++ et ai trouvé la construction suivante:

 if('A' == 0x41) {
  // ...
} else if('A' == 0xc1) {
  // ...
} else {
  // ...
}
 

Je reçois un avertissement Visual Studio disant:

Avertissement L'expression conditionnelle C4127 est constante.

Visual Studio a clairement raison - Sûrement, «A» est défini comme étant 0x41. Pourquoi l'auteur écrit-il ce code, étant donné que deux des trois branches sont du code mort?

116voto

Richard Hodges Points 1972

0xc1 est le EBCDIC Code jeu de caractères pour A . L'auteur teste une telle machine.

http://www.ibm.com/support/knowledgecenter/en/SSGH4D_15.1.3/com.ibm.xlf1513.aix.doc/language_ref/asciit.html

11voto

À première vue, pourrait ressembler à ce qui est du code mort, mais 'A' == 0x41 pas toujours retournera true..

ce que le développeur a essayé de faire ici, c'est paresseusement trouver ce que l'encodage est la machine la mise en œuvre de l'ASCII ou toute variante de EBCDIC

@Richard suggéré Capital un est mappé à 0xc1 à l' International - Extended Binary Coded Decimal Interchange Code voir table ci-dessous dans les 2 succursales de la si d'autre...

enter image description here

une autre valeur différente peut être trouvé en ASCII par exemple:

enter image description here

il aurait très bien fait:

if('p' == 0x70) {
  // ...
} else if('p' == 0x97) {
  //...
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X