La domanda principale è stato risposto più volte: la parola unsigned
può essere utilizzato solo come tipo specificatore di un tipo integrale.
Per quanto riguarda il motivo per cui unsigned
è una parola chiave separata, anziché avere, ad esempio, una parola chiave uint
, i motivi sono storici.
Le prime versioni di C (pre-K & R) ha avuto solo quattro tipi fondamentali:
char
(8 bit, firmato, 2's-complemento)
int
(16 bit, firmato, 2 di -complement)
float
(32 bit)
double
(64 bit, stesso intervallo float
ma maggiore precisione)
Nota cosa manca: non signed
o unsigned
parole chiave, senza short
, long
, o long double
; tutti quelli sono stati aggiunti in seguito. (Programmatori che avevano bisogno di puntatori aritmetici senza segno comunemente usati, che erano liberamente intercambiabili con int
)
Ogni tipo fondamentale aveva un nome che era una singola parola chiave, che rendeva la grammatica semplice.
Quando gli altri tipi sono stati aggiunti in seguito, aveva senso aggiungere prescrittori come unsigned
, short
, e long
ai nomi dei tipi esistenti piuttosto che introdurre nuove parole chiave (che potrebbe aver rotto il codice esistente). Quando il comitato ANSI C standardizzò la lingua nel 1989, dovettero fare una struttura coerente fuori dalle definizioni non proprio del tutto formali pur restando coerenti con le implementazioni esistenti. Il risultato è ciò che abbiamo ora, dove int long unsigned long
è un nome di tipo valido (più comunemente scritto come unsigned long long
).
Se il linguaggio veniva progettato da zero, sospetto che sarebbe stato adottato un approccio diverso. Forse ci sarebbe una singola parola chiave per ogni tipo fondamentale (è l'approccio adottato da C#, ad esempio), o forse i nomi dei tipi fondamentali utilizzerebbero uno schema più coerente piuttosto che un guazzabuglio di parole chiave (per esempio, int:2
per un 2 byte intero, unsigned:4
per un numero intero senza segno a 4 byte). Ma sia C che C++ sono bloccati con l'approccio attuale.
Riferimento: http://cm.bell-labs.com/cm/cs/who/dmr/cman.pdf
fonte
2011-10-12 18:14:38
A meno che non significa usare 'unsigned' da sola (equivalente a' int' non firmato), non riesco a pensare a nessun altro * * strano caso l'uso. –
Il titolo di questa domanda e l'ultima ... domanda nel testo sono molto diversi. Qual é? – Jon
Ho sempre desiderato poter usare 'unsigned' con una classe' bigint'. –