我有以下示例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
答案 0 :(得分:3)
__FUNCTION__
不是宏,它是一个静态变量。 (请参见GCC manual。)
因此,如果它以lambda结尾,则无法在main
的上下文中对其进行“扩展”。
使TEST
成为常规函数将解决此问题。
答案 1 :(得分:1)
这是我解决此问题的方法:
#include <iostream>
#define TEST \
[](const char* function){\
std::cout << function << std::endl;\
}(__FUNCTION__)
int main (int argc, char *argv[]) {
std::cout << __FUNCTION__ << std::endl;
TEST;
}
现在输出为:
main
main