Парсинг / отладка / портирование C ++ программы с большим количеством макросов - PullRequest
3 голосов
/ 24 августа 2011

Мне просто любопытно, если кто-нибудь может помочь найти хороший инструмент для этой задачи.У меня есть большая программа на C / C ++, которую нужно перенести с Win32 на Linux.Поскольку «обертка» (т. Е. Наиболее чувствительная к ОС) часть была успешно изолирована от внутренних частей программы, эта задача включает только прохождение ее «внутренних компонентов».Некоторые вещи работают, некоторые вызывают небольшие проблемы во время компиляции, но есть одна ОГРОМНАЯ неудобная часть - использование макросов.

В основном большинство внутренних компонентов выглядит следующим образом:

START_MAIN( ... )
  SOME_MACRO( ... )
  ANOTHER_MACRO( ... )
  WRITE_SOMETHING()
END_MAIN()

Это делает C / C ++ похожим на Паскаль, но также вызывает много ужасной боли при попытке выяснить, "что не так".

Существуют ли ЛЮБЫЕ инструменты, которые помогут разобрать источники такого типа, чтобы найти причину проблем?

Я медленно (вручную) подхожу к "компилируемости" этой программы, но что-нибудь, что может помочья вижу сквозь этот (искусственно структурированный) беспорядок будет действительно оценен.

Ответы [ 2 ]

1 голос
/ 24 августа 2011

Если вам нужно вручную настроить компиляцию, вывод и прочее (т. Е. Искать настраиваемый синтаксический анализатор C ++), clang - хороший инструмент для начала.

Если вы просто хотите увидеть предварительно обработанный код (с развернутыми макросами), вы можете использовать флаги компилятора:
MSVC : добавить флаги компилятора C / C в C ++ (Проект -> Свойства -> C / C ++ -> Командная строка)
GCC, Clang : добавить флаг компилятора -E

Этот вопрос о предварительной обработке кода C ++ содержит некоторые ответы, которые могут оказаться полезными.

0 голосов
/ 24 августа 2011

Eclipse CDT расширит макросы и даже покажет вам, сколько макро-оценок потребовалось для достижения окончательного кода, который будет выдан препроцессором.

http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew.htm

Посмотрите наРаздел «Макроразведка».

...