0%

C/C++函数名与函数签名相关预定义宏

这里记录下几个编译器预定义宏,得到函数名和函数签名(对于类方法或者模板函数,得到的是完整的签名)。

严格来说它们并不是宏,而是编译器提供的Magic Identifier,它们扩展出来的形式如下:

1
static const char __func__[] = "function-name ";

函数名

  • __func__:C99/C++99标准提供,早期Microsoft C++ Compiler不支持
  • __FUNCTION__

兼容GUNC以及Microsoft C++ Compiler的写法:

1
2
3
4
5
6
7
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 19901L
#define __FUNC__ __func__
#elif defined(__cplusplus) && __cplusplus >= 19901L
#define __FUNC__ __func__
#else
#define __FUNC__ __FUNCTION__
#endif

函数签名

  • __PRETTY__FUNCTION__:这不是标准提供的,是gcc的扩展,Microsoft C++ Compiler不支持
  • __FUNCSIG__:在Microsoft C++ Compiler中,使用这个

兼容GUNC以及Microsoft C++ Compiler的写法:

1
2
3
#if !defined(__GUNC__)
#define __PRETTY_FUNCTION__ __FUNCSIG__
#endif
请我喝瓶肥仔快乐水?

欢迎关注我的其它发布渠道