我正在对一些由大量#ifs和#ifdefs配置的旧代码进行逆向工程。我目前正在通过在编辑器中进行替换来查看各种配置。这既繁琐又(我怀疑)容易出错。
是否有一些gcc预处理器选项可以预处理#if [def]但是保持其他预处理器指令(例如#define)不变?这仅用于逆向工程;我不需要编译或以其他方式使用预处理代码。
答案 0 :(得分:5)
我不知道gcc的预处理器中有任何这样的功能。根据你想要做的事情,它甚至可能是不可能的。如果#ifdef
指令引用先前由#define
指令定义(或不指定)的宏,并且忽略#define
指令,那么这显然不会起作用。
但是unifdef命令可能就是你要找的东西。我刚用sudo apt-get install unifdef
将它安装在我的Ubuntu系统上;应该有类似的方法在其他系统上安装它。
答案 1 :(得分:2)
如果您不需要编译它,您可以使用IDE了解ifdef的能力。在Eclipse中,转到 Project>偏好> C / C ++ Build>路径和符号,并定义所需的符号。 Eclipse将忽略任何未定义符号的ifdef。