Bonjour,
J'ai un petit soucis avec les macros.
Pour mon projet j'ai quelque macro du style
1 2 3 | #define TEST_ASSERT(p_condition) Test::Assert(p_expected, 0, __FUNCTION__, __LINE__, __FILE__) #define TEST_ASSERT_EQUAL(p_expected, p_actual) Test::Assert(p_expected, p_actual, __FUNCTION__, __LINE__, __FILE__) /* Test::Assert est un template que l'on peut spécialiser, et qui fait en gros if(p_exepected != p_actual) error() */ |
Quand l'assert catch, j'ai une trace (d'où la réimplantation, je ne crash pas l'exe).
1 | [ERROR | myFunction < 23 < MyFile.hpp ] Assert fail! |
Mon soucis : j'aimerais arriver à afficher les valeurs passés en paramètres de ma macro. Avec un seul paramètre c'est très simple :
1 2 3 4 | //avant #define TEST_ASSERT(p_condition) Test::Assert(p_expected, 0, __FUNCTION__, __LINE__, __FILE__) //après #define TEST_ASSERT(p_condition) Test::Assert(p_expected, 0, #p_condition,__FUNCTION__, __LINE__, __FILE__) |
Mais, que deviens ceci ?
1 2 3 4 | //avant #define TEST_ASSERT_EQUAL(p_expected, p_actual) Test::Assert(p_expected, p_actual, __FUNCTION__, __LINE__, __FILE__) //après (ne fonctionne pas) #define TEST_ASSERT_EQUAL(p_expected, p_actual) Test::Assert(p_expected, p_actual, #p_exepected ## #p_actual ,__FUNCTION__, __LINE__, __FILE__) |
sous clang :
1 | error: pasting formed '"foo""bar"', an invalid preprocessing token |
sous gcc
1 | error: pasting ""foo"" and ""bar"" does not give a valid preprocessing token |
(cela ne fonctionne pas également avec autre chose qu'une chaine, comme un variable par exemple).
J'ai dû louper un truc sur les macros, les pages comme la doc gcc ne m'ont pas beaucoup aidé…
oui j'utilise des macro en c++, c'est mal toussa toussa, je suis au courant
D'avance merci.
+0
-0