Nel cross-platform di oggi ++ (o C) C mondo che abbiamo :
Data model | short | int | long | long long | pointers/size_t | Sample operating systems
...
LLP64/IL32P64 16 32 32 64 64 Microsoft Windows (x86-64 and IA-64)
LP64/I32LP64 16 32 64 64 64 Most Unix and Unix-like systems, e.g. Solaris, Linux, BSD, and OS X; z/OS
...
Ciò che significa oggi, è che per qualsiasi numero intero "comune" (firmato), int
sarà sufficiente e può ancora essere usato come tipo intero predefinito quando si scrive il codice dell'applicazione C ++. Inoltre, per gli attuali scopi pratici, avrà una dimensione coerente su tutte le piattaforme.
Se un caso d'uso richiede almeno 64 bit, oggi possiamo usarlo long long
, sebbene possibilmente usare uno dei tipi che specificano il testimone o il __int64
tipo potrebbe avere più senso.
Questo lascia long
a metà e stiamo prendendo in considerazione l'idea di vietare l'utilizzo del long
nostro codice dell'applicazione .
Questo avrebbe senso , o esiste un caso per l'utilizzo long
nel moderno codice C ++ (o C) che deve essere eseguito su più piattaforme? (piattaforma essendo desktop, dispositivi mobili, ma non cose come microcontrollori, DSP ecc.)
Link di sfondo forse interessanti:
- Qual è lo standard C ++ che indica la dimensione di int, long type?
- Perché il team Win64 ha scelto il modello LLP64?
- Modelli di programmazione a 64 bit: perché LP64? (un po 'invecchiato)
- È
long
garantito che sia almeno 32 bit? (Questo affronta la discussione di commento sotto. Risposta .)
long
è l'unico modo per garantire 32 bit. int
può essere 16 bit, quindi per alcune applicazioni non è sufficiente. Sì, a int
volte è 16 bit sui compilatori moderni. Sì, le persone scrivono software su microcontrollori. Direi che più persone scrivono software che ha più utenti su microcontrollori che su PC con l'ascesa di dispositivi iPhone e Android per non parlare dell'ascesa di Arduinos ecc.
int
sono ancora presenti 16 bit. Odio dirlo, ma se hai intenzione di scrivere del "mondo multipiattaforma di oggi", non puoi ignorare l'intero subcontinente indiano.