#c #gcc #cppunit
#c #gcc #cppunit
Вопрос:
Когда я компилирую это выражение (CppUnit) в GCC / Ubuntu
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(wcsdesign::tests::ConduitTestFixture, "wcsdesign_Conduit");
Значение wcsdesign::tests::ConduitTestFixture
в конечном итоге преобразуется в N9wcsdesign5tests18ConduitTestFixtureE
.
Есть ли какой-либо способ, которым я могу программно получить исходную строку «wcsdesign::tests::ConduitTestFixture» с учетом «N9wcsdesign5tests18ConduitTestFixtureE»?
Ответ №1:
Добавьте _Z
к символу, прежде чем передавать его abi::__cxa_demangle
. Затем вы получаете исходную строку обратно.
Комментарии:
1. обратите внимание, что искажение имени не выполняется препроцессором (при первом прочтении вашего вопроса предполагалось, что речь идет о поведении макроса препроцессора)
2. @MattMcNabb, не так ли? Кажется, что он искажается в макросе при объединении символов с
##
оператором. Разве препроцессор не отвечает за это?3. препроцессор выполняет
##
, но он не искажает имена. Можете ли вы опубликовать тестовый пример? (Кстати, вы можете использоватьgcc -E
для просмотра программы после предварительной обработки)