解析/调试/移植带有大量宏的c++程序

Parsing/debugging/porting C++ program with lots of macros

本文关键字:c++ 程序 调试 解析      更新时间:2023-10-16

我只是好奇是否有人可以帮助找到一个好的工具来完成这项任务。我有大型程序在C/c++需要从Win32移植到Linux。由于"包装"(即对操作系统最敏感的部分)已经成功地从程序内部分离出来,因此这项任务只涉及到它的"内部"。有些东西可以工作,有些会导致编译时的小问题,但有一个巨大的不方便的部分-宏的使用。

基本上大部分内部是这样的:

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

这使得C/c++看起来像Pascal,但在试图找出"什么是错的"时也给了很多可怕的痛苦。

是否有任何工具可以帮助解析这类源以找到问题的根源?

我正在慢慢地(手动地)接近这个程序的"可编译性",但是任何能帮助我看穿这个(人为结构的)混乱的东西都将是真正的

如果你需要手动调整编译,输出和其他东西(即寻找一个可定制的c++解析器),clang是一个很好的工具。

如果您只是想查看预处理代码(宏展开),您可以使用编译器标志:
MSVC:将/P添加到c++编译器标志中(Project -> Properties -> C/c++ -> Command Line)
GCC, Clang:添加-E编译器标志

这个关于预处理c++代码的问题包含了一些你可能会觉得有用的答案。

Eclipse CDT将展开宏,甚至向您显示需要多少宏求值才能到达预处理器发出的最终代码。

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

查看"宏观探索"部分