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), intsarà 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 __int64tipo potrebbe avere più senso.
Questo lascia longa metà e stiamo prendendo in considerazione l'idea di vietare l'utilizzo del longnostro codice dell'applicazione .
Questo avrebbe senso , o esiste un caso per l'utilizzo longnel 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)
- È
longgarantito che sia almeno 32 bit? (Questo affronta la discussione di commento sotto. Risposta .)
longè l'unico modo per garantire 32 bit. intpuò essere 16 bit, quindi per alcune applicazioni non è sufficiente. Sì, a intvolte è 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.
intsono ancora presenti 16 bit. Odio dirlo, ma se hai intenzione di scrivere del "mondo multipiattaforma di oggi", non puoi ignorare l'intero subcontinente indiano.