Salut,
J'aimerai faire une macrodéfinition d'une fonction prenant un nombre variable d'éléments.
Un peu comme ca:
Seulement cette syntaxe n'est apparement pas correct.Code:#define my_sprintf(...) sprintf(...)
Savez vous comment faire?
Version imprimable
Salut,
J'aimerai faire une macrodéfinition d'une fonction prenant un nombre variable d'éléments.
Un peu comme ca:
Seulement cette syntaxe n'est apparement pas correct.Code:#define my_sprintf(...) sprintf(...)
Savez vous comment faire?
La méthode portable :Citation:
Envoyé par greuh
Ca s'utilise comme ça :Code:#define my_sprintf(a) printf a
Code:my_sprintf (("%s\n", "Hello world"));
Euh... ???
Tu voulais pas dire:
Si c'est ca, je n'y avais pas pensé et ca fonctionne, mais on perd un peu l'intéret du define.Code:
1
2
3 #define my_sprintf(a) a my_sprintf (sprintf("%s\n", "Hello world"));
Ou alors j'ai pas compris... :lol:
et
ça marche pas ?Code:#define my_sprintf sprintf
Si, en fait j'ai mal posé ma question... :oops:Citation:
Envoyé par Le Furet
Ce que je veux faire resemble à ca (en entier):
Et dans mon .cCode:
1
2
3
4
5 #if CONDITION #define my_sprintf(...) sprintf(...) #else #define my_sprintf(...) 0 #endif
Code:
1
2 int n; n = my_sprintf(buffer, "coucou %s\n", ptr);
Et :
Avec la syntaxe d'Emmanuel :Code:
1
2
3
4
5 #if CONDITION #define my_sprintf(a) sprintf(a) #else #define my_sprintf(a) 0 #endif
my_sprintf(("blabla")) ;
Je ne dois pas bien comprendre la syntaxe d'Emmanuel, la fonction sprintf n'apparait nulle part... comme cela peut il fonctionner?Citation:
Envoyé par Le Furet
Seulement, ça ne marche pas partout:
donne ceci sous Visual:Code:
1
2
3
4
5
6 #define my_sprintf(a) sprintf(a) void testDefine() { char chn[10]; my_sprintf(chn, "%d", -3); }
Et sous gcc 3.4.2 (Dev-Cpp):Code:
1
2 warning C4002: too many actual parameters for macro 'my_sprintf' error C2660: 'sprintf' : function does not take 1 parameters
En fait, ça ne marche nulle part...Code:
1
2 "my_sprintf" passed 3 arguments, but takes just 1 `my_sprintf' undeclared (first use this function)
Il y a bien une extension GNU qui permet des macros à nombre de paramètres variables, mais... c'est une extension GNU.
Meuh si, ça fonctionne très bien... Manu a juste ``oublié'' un detail.... ;-)
qui s'utiliseCode:
1
2#define my_sprintf(a) sprintf a
:arrow: pas de parenthèe dans le defineCode:
1
2 my_sprintf(("....."));
:arrow: double parenthèsage à l'utilisation
;-)
Je viens de tester sous Visual et sous Dev-c++, ça a l'air de marcher sur les deux. :)
Non, mais j'ai corrigé mon code.Citation:
Envoyé par greuh
Oui, je suis coutumier du fait. Il faut dire que chez moi, ce code est en bibliothèque depuis 10 ans et que jeme contente de l'utiliser...Citation:
Envoyé par Pouic
http://emmanuel-delahaye.developpez....b/ed/inc/sys.h
Super, ca marche :D
Merci beaucoup! :D
Du coup j'ai un collègue qui veut faire un truc encore un peu plus tordu:
Vous savez faire ca aussi?Code:
1
2
3 int x; #define my_func_A(a, b, c, ...) my_func_B(x, a, b, c, ...)
Bonjour,
la question à déjà été posée sur le forum C :
Macros et nombre d'arguments variable
Nombre d'arguments variable
En C99, il est possible de faire :
Code:#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
Terrible, ca fonctionne :D
Merci :)
PS: désolé, j'avais pas vu l'ancien post... :oops: