2013-07-31 10 views
9

Tradizionalmente, era - in senso stretto - un errore per passare un signed char ai predicati ctype.h perché erano stati definiti solo per -1 a 255, quindi da -128 a -2 poteva finire nella lettura di limiti di array esterni.ctype.h richiede ancora il char non firmato?

È stato risolto questo problema o si sta ancora utilizzando rigorosamente lo unsigned char per evitare comportamenti non definiti nelle versioni moderne di C?

+0

I programmi moderni hanno solo maggiori possibilità di confrontarsi con i personaggi compresi nell'intervallo 128-255, che sarebbero interpretati erroneamente come negativi se visti come caratteri firmati, quindi la risposta è "più che mai". –

risposta

11

si sta ancora parlando rigorosamente di usare il char non firmato per evitare comportamenti indefiniti nelle versioni moderne di C?

Sì, dalla sezione di C11 draft standard7.4la gestione dei caratteri < ctype.h> paragrafo 1 dice (sottolineatura mia):

L'intestazione dichiara diverse funzioni utili per la classificazione e mappatura caratteri. 198) In tutti i casi l'argomento è un valore int, il cui valore deve essere rappresentabile come un carattere senza segno o uguale al valore della macro EOF. Se l'argomento ha qualsiasi altro valore, il comportamento non è definito.

Questo vale anche per draft C99 standard, è possibile trovarlo nella stessa sezione.

Problemi correlati