faire des macros avec l'operateur << windows et linux - C++ - Programmation
Marsh Posté le 05-12-2008 à 17:08:17
utilise BOOST_PP_CAT et BOOST_PP_STRINGIZE qui doivent gérer ca proprement
Marsh Posté le 16-12-2008 à 10:50:32
J'ai toujours pas trouvé, les macro boost on l'air d'etre autant bloqué que mes propres macro.
ce qui est étrange, c'est que les macro en ## marchent tres bien sous Visual. Alors que sous gcc, j'ai des messages d'erreur (en francais helas) :
erreur: le collage de « << » et de « L"No attribute for tag ATTRIBUTE_MD5" » ne donne pas d'alignement lexical de pré-traitement valide
Marsh Posté le 16-12-2008 à 10:52:55
Ouais mais L"Mode verbeux activé - Résumé des paramètres retenus :" c'ets deja une string :E
Essaye :
Code :
|
et VERBOSE("tototototo" )
EDIT :
les chaines avec un L devant c'est pas spécifique visual aussi ??
Marsh Posté le 16-12-2008 à 14:18:52
encadre surtout tes macros proprement.
#define WARN(msg) do { \
if (...) { ... } \
while (0)
comme ça t'es blindé et tu peux faire des WARN("pouet" ); sans warning de ton compilateur.
Marsh Posté le 16-12-2008 à 17:32:17
Joel F a écrit : Ouais mais L"Mode verbeux activé - Résumé des paramètres retenus :" c'ets deja une string :E
|
Je comprend bien que ca peut aider, je vais chercher à faire disparaitre ces L mais hormis dans ces macro, gcc accepte parfaitement (sous linux)
si je n'avais qu'une stream à passer, tout irait bien, je ferais meme plutot une fonction globale ou un helper, mais non... ce que je cherchais à faire (et qui marche bien sous Visual) c'est de construire des chaine comme ca :
VERBOSE( L"Chemin de destination : " << arg_1_dest );
la macro la transforme en
std::wcout << L"Chemin de destination : " << arg_1_dest << std::endl;
Je sens que je vais devoir passer par des variables intermédiaires... je vois pas encore la solution
Marsh Posté le 22-12-2008 à 12:21:16
OK, j'ai trouvé, RESOLU !!!!
Sous Visual c'est la premiere partie, sous GCC, c'est la deuxieme (notes bien le ...)
Code :
|
C'est quoi la meilleure méthode pour distinguer les environnements de compilation ? Là j'ai pris la premiere variable qui me tombait sous la main...
Marsh Posté le 22-12-2008 à 15:18:51
Sinon tu fais un simple VERBOSE(...) std::wcout << __VA_ARGS__ << std::endl
ça devrait passer pour peu que ton compilateur C++ supporte des trucs C99
Marsh Posté le 05-12-2008 à 15:38:58
J'ai porté un projet de Windows vers Linux, et j'ai du corriger la syntaxe de certaines macro, que gcc me refusait. Dans la version qui marchait bien sous Windows, j'utilisais la syntaxe ## pour mes stream...
Maintenant, je suis repassé en une syntaxe en # pour que ca compile sous Linux, et evidemment, ca ne donne pas le résultat attendu (sous win comme sous lin), ca affichage des
L"Mode verbeux activÙ - RÙsumÙ des paramÙtres retenus :"
Mis à part l'unicode qui a l'air de ne pas marcher, c'est surtout le L"" qui m'embête...
Quand j'étais encore avec ##, ça affichait bien le message. Voici le code :
Macros définies actuellement compatibles Windows (vc) et Linux(gcc):
Exemple d'utilisation :
Je sais, c'est pas très commun de concaténer des stream via des macro, si vous voyez une autre manière de faire. Ou si vous savez comment faire accepter les ## à gcc