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

typedef ou #define ?

4 réponses
Avatar
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.

4 réponses

Avatar
Antoine 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...

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

Avatar
Eric Levenez
Le 08/02/08 11:29, dans <fohaul$vir$, « Antoine
Leca » a écrit :

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 -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.


Avatar
Thomas Nemeth
Eric Levenez a tapoté :

Le 08/02/08 11:29, dans <fohaul$vir$, « Antoine
Leca » a écrit :

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



Avatar
Charlie Gordon
"Thomas Nemeth" a écrit dans le message de
news: fohing$76a$
Eric Levenez a tapoté :

Le 08/02/08 11:29, dans <fohaul$vir$, « Antoine

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.