[C++] Cum definesc tipuri de lungme fixa?

Despre limbajul de programare C++ si biblioteca standard STL (forum moderat)
Post Reply
User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

[C++] Cum definesc tipuri de lungme fixa?

Post by Ovidiu Cucu » 31 Aug 2008, 18:43

Problema
Din acest FAQ rezulta faptul ca in C++, in afara de char, unsigned char si signed char toate celelalte tipuri fundamentale au o lungime dependenta de implementare (implementation-defined).
Exista insa cazuri, pentru serializare, transmisie de date, etc. in avem devoie de tipuri cu lungime fixa (de exemplu, intregi care sa aiba fix 32 biti indiferent de platforma).
Ce se poate face in acest caz?

Rezolvare
Daca nu avem deja asa ceva, putem defini noi tipuri de "lungime fixa" ca mai jos

Code: Select all

// My_Types.h (just an example)
// ...
#if defined(SOME_PLATFORM)
// ...
   typedef unsigned int my_32uint
// ...
#elif defined(SOME_OTHER_PLATFORM)
// ...
   typedef unsigned short my_32uint
// ...
// ... etc...
#endif
Mai departe folosim acolo unde este nevoie tipul my_32uint (doar un exemplu) si nu avem decat sa definim constanta preprocesor SOME_PLATFORM sau SOME_OTHER_PLATFORM sau care o mai fi in asa fel incat my_32uint sa aiba exact 32 biti atunci cand compilez pentru platforma data.

In unele SDK-uri avem asemenra tipuri gata definite si nu mai este nevoie sa le definim pe ale noastre.
De exemplu in Windows SDK, avem pentru cazul de mai sus tipul UINT32 (vezi Windows Data Types in MSDN).

In plus, in Visual C++ se pot utiliza tipuri specifice de intregi cu lungime fixa: __int8, __int16, __int32 si __int64.


Next FAQ >>



Post Reply