Ctype.h

_Standard_library < ! -- pour éditer ce calibre aller au calibre de : C_Standard_library -->

Le d'en-tête ctype.h dans la bibliothèque standard de la norme ANSI C de pour le langage de programmation du C contient les déclarations pour des fonctions de classification de caractère.

Histoire

Les fabricants d'outils tôt écrivant dans le C sous le Unix ont commencé à développer des idiomes à une vitesse rapide pour classifier des caractères dans différents types. Par exemple, dans le jeu de caractères du ASCII , l'essai suivant identifie une lettre :

lang=" de if (<= « Z » de && c de <= c de « A » || « a » <= « z ") du && c du <= c

Cependant, cet idiome effectue le travail du pas pour d'autres jeux de caractères tels que l'EBCDIC .

Assez bientôt, les programmes sont devenus profondément avec des essais tels que celui ci-dessus, ou plus mauvais, des essais presque comme celui ci-dessus. Un programmeur peut écrire au même idiome plusieurs différentes manières, qui ralentit la compréhension et augmente la chance pour des erreurs.

D'ici peu, les idiomes ont été remplacés par les fonctions dans

Exécution

À la différence de l'exemple ci-dessus, les routines de classification de caractère ne sont pas écrites comme essais de comparaison. Dans la plupart des bibliothèques de C, elles sont écrites en tant que consultations de table statiques au lieu des macros ou des fonctions.

Par exemple, un choix de 256 nombres entiers de huit bits, disposé comme bitfields, est créé, où chaque peu correspond à une propriété particulière du caractère, par exemple, isdigit, isalpha. Si le peu de bas-ordre des nombres entiers correspond à la propriété d'isdigit, le code pourrait être écrit thusly :

lang=" de #define (x) (TABLE et 1)

Les versions tôt du Linux ont employé une méthode potentiellement défectueuse semblable au premier échantillon de code :

lang=" de #define (x) ((x) >= « 0 » <= « 9 » de && (x))

Ceci peut poser des problèmes si x a un effet secondaire---par exemple, si on appelle le isdigit (x++) ou le isdigit (le run_some_program ()). Il ne serait pas immédiatement évident que l'argument à isdigit soit évalué deux fois. Pour cette raison, l'approche table-basée est généralement employée.

La différence entre ces deux méthodes est devenue un point d'intérêt pendant le cas du SCO v.

Le contenu de

Le contient des prototypes pour des douzaine des fonctions classifications de caractère. Toutes ces fonctions excepté isdigit et isxdigit sont lieu-spécifiques ; leur comportement peut changer si le lieu change.

Utilisation incorrecte

Les états standard (§7.4-1) : le de en tout enferme l'argument est un international , la valeur dont être représentable comme char non signé ou égalera la valeur du macro EOF . Si l'argument a n'importe quelle autre valeur, le comportement est non défini.

Malheureusement beaucoup de programmeurs oublient qu'un type du char peut être signé ou non signé, selon l'exécution. Si les types du char sont signés, la conversion implicite du char en international peut produire des valeurs négatives, ayant pour résultat le comportement non défini. Cela signifie habituellement que si l'argument est employé comme index sur une table de consultation, il accédera à un secteur en dehors de la table correcte, et peut même se briser le programme.

La manière correcte d'employer des arguments du char est à la première fonte eux au char non signé .

Les valeurs de int-type retournées par getchar, getc, et fgetc sont garanties pour être dans la gamme du char non signé (ou du EOF ), et aucune fonte n'est nécessaire ainsi dans ces cas.

Random links:OIN 3166-2 : PAR | Endoscope | Élection générale thaïe, 2001 | Au delà du château Wolfenstein | Existentialisme féministe | Ctype.h