Maison > Article > développement back-end > Pourquoi la comparaison d'entiers signés et non signés en C déclenche-t-elle un avertissement ?
En travaillant sur l'exercice 2-3 de "C accéléré", les apprenants peuvent rencontrer un avertissement lié à la comparaison d'entiers signés et non signés. expressions entières non signées. Cet avertissement survient lors de l'utilisation d'un entier (int) pour comparer avec une chaîne ::size_type.
Les entiers en C peuvent être signés ou non signés. Les entiers signés ont une plage de valeurs allant de -2^(n-1) à 2^(n-1) - 1, où n est le nombre de bits représentant l'entier. Les entiers non signés, en revanche, ont une plage de 0 à 2^n - 1.
L'avertissement dans le code donné se produit parce que la variable r est un int, qui est signé, tandis que padtopbottom est également un int. Cependant, c est un string::size_type, qui n'est pas signé sur la plupart des plateformes. Lors de la comparaison d'entiers signés et non signés, le compilateur avertit pour indiquer le potentiel de comportement inattendu en raison des différentes plages de valeurs.
Pour éviter de tels avertissements et problèmes potentiels, il est recommandé de :
Le code fourni n'inclut pas le code de l'exemple de programme dans "Accelerated C". Il est possible que le programme d'origine ait utilisé const int pour le remplissage car on savait que les valeurs seraient positives et que const a été utilisé pour plus de clarté. Cependant, lors de l'utilisation de la saisie utilisateur, il est important de déclarer les variables comme non signées ou size_t pour éviter l'avertissement susmentionné. Les chapitres ultérieurs du livre peuvent fournir des informations supplémentaires sur la manière de gérer de telles comparaisons de manière appropriée.
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!