如何定义print_name实现C++函数引用参数名的自动打印
C++ print_name 实现方案
C++ 运行时没有原生反射能力直接获取调用时传入的变量名,最符合需求的实现方式是借助C预处理器的字符串化运算符(#) 定义宏,不需要在调用时显式手写参数名字符串。
完整代码实现
#include <iostream> // 定义print_name宏,用do-while(0)包裹保证多场景下语法安全 #define print_name(var) \ do { \ std::cout << "name: " #var << '\n'; \ } while(0) void func(const int& A){ print_name(A); } // 测试用例 int main() { int A = 20; func(A); // 输出目标内容 name: A return 0; }
实现原理
- 预处理器的
#运算符会将宏的输入参数原样转换为字符串字面量,当调用print_name(A)时,预编译阶段会自动把代码展开为:do { std::cout << "name: " "A" << '\n'; } while(0); - C++ 中相邻的字符串字面量会自动拼接,最终运行时就会输出目标内容。
内容的提问来源于stack exchange,提问作者Alejandro
相关产品推荐
相关产品推荐

