define et concatenation de chaine caractère - UTF8
Bonjour,
Pour que mon code soit indépendant de l'encodage des caractères j'ai fait un simple define :
Code:
1 2 3 4 5
| #ifdef EMV_UNICODE
#define EMV_T( x ) L ## x
#else
#define EMV_T( x ) x
#endif |
Et pour faire mes assertions :
Code:
1 2
| #define EMV_ASSERT( bExpression, ... ) \
eMV::EmvAssert( EMV_T( #bExpression ), EMV_FILE, EMV_LINE, EMV_FUNCTION, EMV_T( ##__VA_ARGS__ ), EMV_T( "" ) ) ) |
Et en utilisation ça donne :
Code:
1 2
| EMV_ASSERT( uVar >= 0, "Valeur négative... Pas bien !" ); // OK
EMV_ASSERT( bTest ); // Error C2065: 'L' : undeclared identifier |
Ce qui est normal puisque le paramètre 5 de mon eMV::EmvAssert c'est EMV_T( ##__VA_ARGS__ ) donc ça donne L.
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é :
Code:
#define EMV_T( x ) L ## "" ## L ## x
Mais ça ne fonctionne évidement pas... Puisque pour un EMV_ASSERT sans message, ça donne L""L...
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