Bonjour,
Pour que mon code soit indépendant de l'encodage des caractères j'ai fait un simple define :
Et pour faire mes assertions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 #ifdef EMV_UNICODE #define EMV_T( x ) L ## x #else #define EMV_T( x ) x #endif
Et en utilisation ça donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #define EMV_ASSERT( bExpression, ... ) \ eMV::EmvAssert( EMV_T( #bExpression ), EMV_FILE, EMV_LINE, EMV_FUNCTION, EMV_T( ##__VA_ARGS__ ), EMV_T( "" ) ) )
Ce qui est normal puisque le paramètre 5 de mon eMV::EmvAssert c'est EMV_T( ##__VA_ARGS__ ) donc ça donne L.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 EMV_ASSERT( uVar >= 0, "Valeur négative... Pas bien !" ); // OK EMV_ASSERT( bTest ); // Error C2065: 'L' : undeclared identifier
La solution simple serait de remplacer tous mes EMV_ASSERT( condition ) par EMV_ASSERT( condition, "" ). Mais c'est assez lourd et ça demande beaucoup de changement dans mon code... J'ai essayé :
Mais ça ne fonctionne évidement pas... Puisque pour un EMV_ASSERT sans message, ça donne L""L...
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define EMV_T( x ) L ## "" ## L ## x
Donc j'aimerais avoir votre avis pour savoir comment vous auriez résolu ce problème sans reparcourir tout le code en ajoutant des "" useless...
Merci
Partager