解析/调试/移植带有大量宏的c++程序
Parsing/debugging/porting C++ program with lots of macros
我只是好奇是否有人可以帮助找到一个好的工具来完成这项任务。我有大型程序在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查看"宏观探索"部分
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 程序崩溃并显示"std::out_of_range"错误
- 在C应用程序中运行C++(带有STL)函数
- 使用mongocxx驱动程序时包含头文件问题
- 如何在c++程序中找到函数的地址