c++ - Linux 中的 __func__ 与 VS 中的 __FUNCTION__

标签 c++ linux visual-studio-2008 gcc

class A 
{
 public:
 void Print()
 {
   #if defined( win32 )
   std::cout << __FUNCTION__ << std::endl;
   #else
   std::cout << __func__ << std::endl;
   #endif
 }
};

int main()
{
 A ob;
 ob.Print();
 return 0;
}

上面的代码片段在 Windows 中打印 A::Print ,在 Linux 中打印 Print 。 Linux 中获取 classname::functionname 的方法是什么?

最佳答案

没有您正在寻找的宏。但您可以轻松地从 __PRETTY_FUNCTION__ 做到这一点像:

inline std::string 
method_name (const std::string &fsig)
{
  size_t colons = fsig.find ("::");
  size_t sbeg = fsig.substr (0, colons).rfind (" ") + 1;
  size_t send = fsig.rfind ("(") - sbeg;
  return fsig.substr (sbeg, send) + "()";
}

#define __METHOD_NAME__ method_name (__PRETTY_FUNCTION__)

然后使用类似:

#if defined (win32)
std::cout << __FUNCTION__ << std::endl;
#else
std::cout << __METHOD_NAME__ << std::endl;
#endif

获得相同的结果

关于c++ - Linux 中的 __func__ 与 VS 中的 __FUNCTION__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21088310/

相关文章:

wpf - 如何在 WPF 网格中插入行/列?

c# - 分析 SQL Server 性能问题?

visual-studio-2010 - 在 Visual Studio 2008 中将在 Visual Studio 2010 中编译的 dll 与目标 .NET Framework 4.0 一起使用

c++ - 如何避免模版函数调用不明确?

c++ - 是否有预处理器定义来区分 gcc 和 g++ 代码?

linux - 如何获取/proc/[pid]/status的信息

python - 使用 Linux chmod 的权限

c++ - 选择套接字会弄乱数据

java - Java 是否像 C++ 那样具有未定义的行为?

java - Linux - 通过shell脚本运行jar文件时出现IO异常