如何写我记录的函数和类名?

时间:2014-05-20 08:24:31

标签: c++ logging macros

我有一个简单的状态机,有一个名为IState的类,其中包含一个函数:

IState doSomething(int i);

我有很多继承人,AstateBState ...

我想登录我目前处于的状态,我想也许我可以在以下行中写下doSomething的所有实现:

writeToLog("current function is" << __function__);

但不幸的是它没有帮助,因为所有命名相同的函数,有没有办法用它的类名写出完整的函数名?

谢谢

3 个答案:

答案 0 :(得分:1)

如果您的writeToLog函数只需要一个C字符串,那么您可以这样做:

writeToLog("current function is" __FUNCTION__);

请注意"current function is"__FUNCTION__之间没有逗号(或任何其他运算符) - C和相关语言会自动连接字符串文字。

还请注意使用__FUNCTION__而不是__function__

答案 1 :(得分:1)

对于g ++来获取类名,您可以使用:Is there a __CLASS__ macro in C++?

对于函数名称,您始终可以使用__FUNCTION__宏。

如果我没记错MSVC,__FUNCTION__宏也会扩展为包含类名。

强制性链接:

https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html

http://msdn.microsoft.com/en-us/library/b0084kay.aspx

答案 2 :(得分:0)

__func__的标准要求是:

  

函数本地预定义变量 func 被定义为表单的定义

static const char __func__[] = "function-name ";
  已提供

,其中function-name是实现定义的字符串。没有具体说明   这样的变量的地址与程序中任何其他对象的地址不同。

您可能使用的任何其他宏都是非标准的 - 您必须查看您的编译器文档或分享您正在使用的宏。