- 论坛徽章:
- 0
|
理论我不清楚,但我的实践经验,是不能简单的将第二句删除的。
如果__MINGW_IMP_SYMBOL是另一个宏,那么两句的效果与一句的效果就会有差异。
这里有一个我的实际例子:
#define __DEC_CFuncAtDestruct_INST(pos, arg1, arg2) CFuncAtDestruct<typeof(*arg1), typeof(*arg2)> auto_CFuncAtDestruct_##pos(arg1, arg2)
#define _DEC_CFuncAtDestruct_INST(pos, arg1, arg2) __DEC_CFuncAtDestruct_INST(pos, arg1, arg2)
#define DEC_CFuncAtDestruct_INST(arg1, arg2) _DEC_CFuncAtDestruct_INST(__LINE__, arg1, arg2)
按照简单的理解,第二个宏是可以不要的,但偏偏那么奇怪,不要了它,第1个宏并不以将pos展开为__LINE__对应的值,而只能展开为__LINE__这几个字符。
效果就是,只有这三个宏一起,第二个宏作一个简单的中转,第一个宏才能按照预期进行工作。
------------------------------------
欢迎光临我的博客:www.danoking.com [DNK的生涯|IT人的故事] |
|