看来我经常花太多时间尝试获取#define宏来完全执行我想要的操作。我将在下面发布当前的困境,我们将为您提供帮助。但是,真正更大的问题是,有人可以推荐任何实用工具来快速显示宏的实际作用吗?如果我能发现什么地方出了问题,似乎即使是缓慢的试错过程也会更快。
目前,我正在从我制作的DLL中动态加载一长串函数。我进行设置的方式是,函数指针与导出的函数具有相同的名称,用于原型(prototype)化它们的typedef具有相同的名称,但带有下划线。因此,我想使用一个定义来简化一长串函数指针的分配。
例如,在下面的代码语句中,“hexdump”是类型定义函数点的名称,也是函数的名称,而_hexdump是类型定义的名称。如果GetProcAddress()失败,则失败计数器递增。
if (!(hexdump = (_hexdump)GetProcAddress(h, "hexdump"))) --iFail;
所以说我想用宏替换上面的每一行,就像这样...
GETADDR_FOR(hexdump )
好吧,这是到目前为止我能想到的最好的。它不起作用(我//注释只是为了防止消息中的文本格式设置)...
// #define GETADDR_FOR(a) if (!(a = (#_#a)GetProcAddress(h, "/""#a"/""))) --iFail;
再说一次,当我对自己犯下的愚蠢错误有所了解时,这将使我每天拥有一个可以通过简单地插入我的宏向我展示自己的方式错误的实用程序。
最佳答案
转到https://godbolt.org/。在左 Pane 中输入代码,然后选择gcc作为编译器,在右 Pane 中将参数作为-E。您的预处理代码将显示在右侧。