我正在对一些由大量#ifs 和#ifdefs 配置的旧代码进行逆向工程。我目前正在通过在编辑器中进行替换来查看各种配置。这既乏味又(我怀疑)容易出错。
是否有一些 gcc 预处理器选项可以预处理 #if[def]s 但保持其他预处理器指令(例如 #define)不变?这仅用于逆向工程;我不需要编译或以其他方式使用预处理代码。
我不知道 gcc 的预处理器中有任何此类功能。并且取决于你想要做什么,它甚至可能是不可能的。如果#ifdef
指令引用了指令先前定义(或未定义)的宏#define
,而您忽略了#define
指令,那么这显然行不通。
但是unifdef命令很可能就是您要找的。我刚刚将它安装在我的 Ubuntu 系统上sudo apt-get install unifdef
;应该有类似的方法将其安装在其他系统上。
如果不需要编译,可以使用 IDE 理解 ifdefs 的能力。在 Eclipse 中,前往Project > Preferences > C/C++ Build > Paths and Symbols,然后定义所需的符号。然后,Eclipse 将忽略任何未定义符号的 ifdef。