typedef ou #define ?

Le
Thomas Nemeth
Bonjour,

Je suis entrain de faire un programme compilable sous Linux et
Windows (avec mingw32). J'y utilise des sockets. Or j'ai remarqué
qu'utiliser le type 'int' pour les sockets sous Windows avait
tendance à ne pas faire marcher le programme alors que si je les
défini de type 'SOCKET', ça marche mieux.

Le logiciel étant compilable sous les 2 OS, j'ai donc, pour le
moment, fait la chose suivante :

#ifdef WIN32
# define Socket SOCKET
#else
# define Socket int
#endif

Il est aussi possible de faire ça avec typedef :

#ifdef WIN32
typedef SOCKET Socket
#else
typedef int Socket
#endif

D'après vous, quelle est la meilleure implémentation des 2, s'il y
en a une autre qu'une simple question de goût, et pourquoi ?

Merci d'avance.


Thomas.
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Antoine Leca
Le #1004481
En news:foh6bm$27o$, Thomas Nemeth va escriure:
j'ai donc, pour le moment, fait la chose suivante :

#ifdef WIN32
# define Socket SOCKET
#else
# define Socket int
#endif

Il est aussi possible de faire ça avec typedef :

#ifdef WIN32
typedef SOCKET Socket
#else
typedef int Socket
#endif

D'après vous, quelle est la meilleure implémentation des 2,


Dans l'état actuel, la meilleure c'est la première, car dans la deuxième il
manque des virgules...

s'il y en a une autre qu'une simple question de goût, et pourquoi ?


En général on choisit la deuxième méthode, parce que les symboles du
préprocesseur sont éliminés plus tôt que les alias de types, donc parfois
les seconds se retrouvent disponibles pour le débogage mais pas les
premiers.
Évidemment, si ton compilateur est capable de garder l'information des
symboles du processeur dans les informations de débogage, l'argument n'a
plus de valeur.


Antoine

Eric Levenez
Le #1004480
Le 08/02/08 11:29, dans Leca »
En news:foh6bm$27o$, Thomas Nemeth va escriure:
j'ai donc, pour le moment, fait la chose suivante :

#ifdef WIN32
# define Socket SOCKET
#else
# define Socket int
#endif

Il est aussi possible de faire ça avec typedef :

#ifdef WIN32
typedef SOCKET Socket
#else
typedef int Socket
#endif

D'après vous, quelle est la meilleure implémentation des 2,


Dans l'état actuel, la meilleure c'est la première, car dans la deuxième il
manque des virgules...


Et des points au dessus :-)

s'il y en a une autre qu'une simple question de goût, et pourquoi ?


En général on choisit la deuxième méthode, parce que les symboles du
préprocesseur sont éliminés plus tôt que les alias de types, donc parfois
les seconds se retrouvent disponibles pour le débogage mais pas les
premiers.


Autre solution toute aussi moche :

#ifndef WIN32
typedef int SOCKET;
#endif

Et utilisation de SOCKET à la place de Socket.

--
Éric Lévénez -- Unix is not only an OS, it's a way of life.


Thomas Nemeth
Le #1004479
Eric Levenez a tapoté :

Le 08/02/08 11:29, dans Leca »
En news:foh6bm$27o$, Thomas Nemeth va escriure:
j'ai donc, pour le moment, fait la chose suivante :

#ifdef WIN32
# define Socket SOCKET
#else
# define Socket int
#endif

Il est aussi possible de faire ça avec typedef :

#ifdef WIN32
typedef SOCKET Socket
#else
typedef int Socket
#endif

D'après vous, quelle est la meilleure implémentation des 2,


Dans l'état actuel, la meilleure c'est la première, car dans la
deuxième il manque des virgules...


Et des points au dessus :-)

s'il y en a une autre qu'une simple question de goût, et
pourquoi ?


En général on choisit la deuxième méthode, parce que les symboles du
préprocesseur sont éliminés plus tôt que les alias de types, donc
parfois les seconds se retrouvent disponibles pour le débogage mais
pas les premiers.


Autre solution toute aussi moche :

#ifndef WIN32
typedef int SOCKET;
#endif

Et utilisation de SOCKET à la place de Socket.


Ok, merci à vous deux. C'est vrai que d'une manière générale, je
préfère utiliser des noms de types en minuscules et laisser les
majuscules aux macros du préprocesseur...


Thomas



Charlie Gordon
Le #1004477
"Thomas Nemeth" news: fohing$76a$
Eric Levenez a tapoté :

Le 08/02/08 11:29, dans
Autre solution toute aussi moche :

#ifndef WIN32
typedef int SOCKET;
#endif

Et utilisation de SOCKET à la place de Socket.


Ok, merci à vous deux. C'est vrai que d'une manière générale, je
préfère utiliser des noms de types en minuscules et laisser les
majuscules aux macros du préprocesseur...


Tout a fait d'accord, c'est une des raisons qui font que programmer en C
pour Windows donne la nausée ;-)

--
Chqrlie.


Publicité
Poster une réponse
Anonyme