Défine préprocesseur contenant un point [Résolu] - C - Programmation
Marsh Posté le 04-01-2008 à 22:08:23
On ne peut pas mettre un point dans un #define.
Ce que tu peux faire (même si c'est très sale), c'est te définir une struct sockaddr_in_win32 identique à ton struct sockaddr_in, mais avec une union S_un autour du champs s_addr. Ensuite tu fais un #define sockaddr_in sockaddr_in_win32 de manière à ce que toutes tes structures utilisent ta définition, et voilà. Evidemment c'est pas portable puisque ça te met la définition d'un sockaddr_in en dur dans ton code.
Marsh Posté le 04-01-2008 à 22:38:52
je déplace sur prog
Marsh Posté le 04-01-2008 à 22:39:13
Ce sujet a été déplacé de la catégorie OS Alternatifs vers la categorie Programmation par Black_lord
Marsh Posté le 04-01-2008 à 22:48:11
black_lord a écrit : Ce sujet a été déplacé de la catégorie OS Alternatifs vers la categorie Programmation par Black_lord |
, sry l'habitude
matafan a écrit : On ne peut pas mettre un point dans un #define. |
D'après ce que j'ai compris, ça semble être une bonne idée, mais, heum, comment dire ...
Comment on fait ?
Marsh Posté le 05-01-2008 à 12:29:38
utb diablo a écrit : Le but, c'est de porter un soft codé pour win32 utilisant de facon basique les sockets win32, sur un système *nix. |
Je ne sais pas trop ce que tu cherches à bricoler, mais ici, il y a des exemples de code socket portable...
http://mapage.noos.fr/emdel/reseaux.htm
Marsh Posté le 05-01-2008 à 12:30:09
matafan a écrit : On ne peut pas mettre un point dans un #define. |
Marsh Posté le 05-01-2008 à 13:11:29
Emmanuel Delahaye a écrit : |
D'habitude je code plutôt portable, mais j'ai récupéré une centaine de code, le plus souvent codé pour Win32 avec WSADATA toussa,
Et pis bon, j'avais un peu la flemme de modifier une centaine de code à la main, j'ai créé un fichier windows.h dans /usr/include avec ceci dedans
Code :
|
Un peu bourrin, mais ca marche, si je règle le problème de S_un.S_addr, je devrais être capable de compiler tout (presque) mes programmes dans problème
Marsh Posté le 05-01-2008 à 13:44:22
ya des define qui ferait mieux d'etre des typedef ou des static const néanmoins
Marsh Posté le 05-01-2008 à 14:01:02
Oui je sais mais je recherche pas la propreté
Pour l'instant, j'essaie juste de faire en sorte que mes codes compilent sous *nix, et apparemment, la solution de matafan est bonne.
Si on pouvait se concentrer là-dessus Parce que bon, en C j'ai juste les bases, donc tout ce qui est structure, union etc J'y comprends pas grand chose
Si quelqu'un pouvait lire la réponse de matafan et me dire ce que je dois faire ce serait sympa
Merci
Marsh Posté le 05-01-2008 à 14:16:49
utb diablo a écrit : Oui je sais mais je recherche pas la propreté |
Au revoir.
Marsh Posté le 05-01-2008 à 14:25:53
Bon ok . Et si je fais ça :
Code :
|
Vous voulez bien m'aider ? siouplait
Marsh Posté le 05-01-2008 à 16:34:42
Pourquoi te casser la tete pour une seule ligne qui te cachera la vraie structure (et qui pourrait etre plus tard source de bogue) ?
Pourquoi ne pas utliser une condition du style
Code :
|
Marsh Posté le 05-01-2008 à 16:37:14
Ca m'oblige à modifier mes 100 bouts de code, ce qui est impensable
Marsh Posté le 05-01-2008 à 17:03:23
utb diablo a écrit : Ca m'oblige à modifier mes 100 bouts de code, ce qui est impensable |
Bah, t'as pas l'air de connaitre l'axiome numéro 1 en informatique : La machine est là pour travailler.
Primo, tu te fais un script qui fait du chercher/remplacer (à tester en local avant de mettre sur un truc de prod...)
Deuxio, sous Win32 le code "addr_in.sin_addr.s_addr=inet_addr(argv[1]);" fonctionne aussi, vu que s_addr est définie comme un alias à S_un.S_addr.
Bref, rends service à tout le monde et vire ce putain de code qu'un gizmo a ramassé sur le premier trou du cul du web sans se servir du peu de neurone qui lui restait pour savoir si c'était portable ou pas .
Marsh Posté le 05-01-2008 à 19:27:08
J'ai réglé ça par un script de find/replace, sed powa
Merci a tous pour votre aide et à bientôt
Marsh Posté le 05-01-2008 à 19:47:36
tpierron a écrit : vire ce putain de code qu'un gizmo a ramassé sur le premier trou du cul du web sans se servir du peu de neurone qui lui restait pour savoir si c'était portable ou pas . |
Joli !
Marsh Posté le 05-01-2008 à 20:38:37
ReplyMarsh Posté le 05-01-2008 à 20:43:32
matafan a écrit :
|
Pourquoi on ne pourrait pas mettre de . dans une macro ?
Marsh Posté le 05-01-2008 à 21:34:08
Dans un nom de macro ? Parce que dans un nom de macro on ne peut mettre que des lettres, des chiffres (ailleurs qu'en tête) et des underscores. M'enfin ça tu le sais. Je parlais des noms de macro.
Marsh Posté le 05-01-2008 à 21:38:01
matafan a écrit : Dans un nom de macro ? Parce que dans un nom de macro on ne peut mettre que des lettres, des chiffres (ailleurs qu'en tête) et des underscores. M'enfin ça tu le sais. Je parlais des noms de macro. |
Ah, dans le nom, OK...
Marsh Posté le 04-01-2008 à 20:17:09
Salut les gens,
vala, j'aurais besoin de définir une constante préprocesseur nommée S_un.S_addr à s_addr
J'avais éssayé
mais gcc n'aime pas trop, il plante à la compil
103.c:210: error: expected identifier before ‘.’ token
Voici mon code original
J'aurais aimé qu'après le passage du préprocesseur, ca donne un truc du genre
Le but, c'est de porter un soft codé pour win32 utilisant de facon basique les sockets win32, sur un système *nix.
Si quelqu'un a une idée pour mes défines ou autres, je suis preneur.
Merci davans
Message édité par utb diablo le 05-01-2008 à 19:27:37
---------------
Au royaume des aveugles, les borgnes sont rois xo0