我有这个示例 C++ 代码:
#include <iostream>
#define TEST( function ) \
[](){\
std::cout << function << std::endl;\
}()
int main (int argc, char *argv[]) {
std::cout << __FUNCTION__ << std::endl;
TEST(__FUNCTION__);
}
当我运行它时,我得到这个输出:
main
main::<lambda_e118d547a20d031f709c1a0a4ae901df>::operator ()
这表明 __FUNCTION__
在宏 TEST 中展开
不过,我想要的是能够在将 __FUNCTION__
传递给宏 TEST 之前展开它并获得此输出:
main
main
最佳答案
__FUNCTION__
不是宏,它是静态变量。 (参见 GCC manual。)
因此,如果它在 lambda 内部结束,则无法在 main
的上下文中“扩展”它。
使 TEST
成为常规函数将解决此问题。
关于c++ - 如何在将 C++ 宏作为参数传递给另一个宏之前展开它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58960037/