Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Types de données portable

8 réponses
Avatar
TSalm
Bonjour,

Les types de données peuvent être différent d'un systéme à un autre.
Afin d'assurer la portabilité de mon appli, dois-je définir un fichier
de #define dont l'idée est :

#ifdef __SYSTEME_TYPE__
#define INT int
#endif


ou C++ propose t-il une solution ?

Merci d'avance,
TSalm

8 réponses

Avatar
Fabien LE LEZ
On Sun, 10 Jun 2007 00:01:08 +0200, TSalm :

#ifdef __SYSTEME_TYPE__
#define INT int
#endif


Utiliser #define est une mauvaise idée dans la quasi-totalité des
cas[*].
À remplacer par typedef.

Sinon, l'idée est bonne, à ceci près que tu ne voudras sans doute pas
définir un type "INT" mais quelque chose de plus précis, comme
"signed_int_32_bits" ou "unsigned_int_64_bits" (avec des noms un peu
plus courts, bien sûr).



[*] Imagine que tu aies deux headers :

A.h (que tu as écrit)

#define INT int

B.h (qui vient, par exemple, d'une bibliothèque externe)

class Machin
{
unsigned short INT;
};


Si tu inclus B.h, puis A.h, ça compilera sans problème.
Si tu inclus A.h, puis B.h, tu auras une erreur bizarre, dans un
header que tu ne connais pas forcément.

Avatar
TSalm
[*] Imagine que tu aies deux headers :

A.h (que tu as écrit)

#define INT int

B.h (qui vient, par exemple, d'une bibliothèque externe)

class Machin
{
unsigned short INT;
};


Si tu inclus B.h, puis A.h, ça compilera sans problème.
Si tu inclus A.h, puis B.h, tu auras une erreur bizarre, dans un
header que tu ne connais pas forcément.



Ne serais-ce ps le contraire ?
A.h est le fichier contenant la définition utilsé dans B.h, ce devrait
être B.h qui devrait être inclus après (?)

Avatar
Serge Paccalin
Le dimanche 10 juin 2007 à 01:15:18, TSalm a écrit dans
fr.comp.lang.c++ :

[*] Imagine que tu aies deux headers :

A.h (que tu as écrit)
#define INT int

B.h (qui vient, par exemple, d'une bibliothèque externe)
class Machin
{
unsigned short INT;
};

Si tu inclus B.h, puis A.h, ça compilera sans problème.
Si tu inclus A.h, puis B.h, tu auras une erreur bizarre, dans un
header que tu ne connais pas forcément.


Ne serais-ce ps le contraire ?
A.h est le fichier contenant la définition utilsé dans B.h, ce devrait
être B.h qui devrait être inclus après (?)


Eh non, justement. B.h n'utilise PAS la définition de A.h, au contraire,
cette définition contrarie ce que veut faire B.h (définir une
donnée-membre de Machin qui s'appellerait INT).

--
___________
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Pour bien répondre avec Google, ne pas cliquer
-'(__) « Répondre », mais « Afficher les options »,
_/___(_) puis cliquer « Répondre » (parmi les options).


Avatar
Michael DOUBEZ
Bonjour,

Les types de données peuvent être différent d'un systéme à un autre.
Afin d'assurer la portabilité de mon appli, dois-je définir un fichier
de #define dont l'idée est :

#ifdef __SYSTEME_TYPE__
#define INT int
#endif


ou C++ propose t-il une solution ?


C++ non mais les compilateurs C99 proposent stdint.h qui offre des
garanties plus contraignantes sur les types (sint32_t, uint32_t ...).

Ce header est proposé pour C0x, je n'en connais pas le statut. Mais il
est en général présent avec les compilateurs C++ saufs pour les plus
anciens.

Michael

Avatar
Cyrille

Ce header est proposé pour C0x, je n'en connais pas le statut. Mais il
est en général présent avec les compilateurs C++ saufs pour les plus
anciens.


Et la bibliothèque Boost contient un header équivalent proposant les
mêmes types.

--
Cyrille

Avatar
James Kanze
On Jun 11, 9:09 am, Michael DOUBEZ wrote:

Les types de données peuvent être différent d'un systéme à un autre.
Afin d'assurer la portabilité de mon appli, dois-je définir un fich ier
de #define dont l'idée est :

#ifdef __SYSTEME_TYPE__
#define INT int
#endif

ou C++ propose t-il une solution ?


C++ non mais les compilateurs C99 proposent stdint.h qui offre des
garanties plus contraignantes sur les types (sint32_t, uint32_t ...).

Ce header est proposé pour C0x, je n'en connais pas le statut. Mais il
est en général présent avec les compilateurs C++ saufs pour les plus
anciens.


C'est à peu près certain de faire partie de la prochaine
version de la norme. Sous le nom <cstdint>, évidemment:-).

--
James Kanze (Gabi Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
TSalm
Eh non, justement. B.h n'utilise PAS la définition de A.h, au contraire,
cette définition contrarie ce que veut faire B.h (définir une
donnée-membre de Machin qui s'appellerait INT).


oui, évidemment.
Merci pour ce petit conseil
TSalm

Avatar
TSalm
merci à tous,

je vais donc plutôt voir du côté de bibliothéques déjà écrite.