c++ - 如何在将 C++ 宏作为参数传递给另一个宏之前展开它

标签 c++

我有这个示例 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/

相关文章:

c++ - QByteArray 到 char*,用 libcurl 发送

c++ - 海湾合作委员会 4.8.4 "pragma GCC diagnostic not applied"

c++ - 检查操作系统兼容性

C++ 原型(prototype)没有被重新定义

c++ - 在 C 预处理器中指定一个文件夹/目录的正确方法是什么?

c++ - 对于以下情况,STL map 或 unordered_map 哪个更好

c++ - boost asio 的链接器问题

c++ - directory_entry 的输出与具有变体的类的重载 ostream 运算符<< 冲突

c++ - 如何将源代码附加到 Eclipse CDT 上的库

c++ - 在 C++ 中将 .docx 转换为 .txt