如何写日志的函数和类名我在

How to write to log the function and class name i am in ?

本文关键字:函数 何写 日志      更新时间:2023-10-16

我有一个简单的状态机,有一个叫做IState的类,它有一个函数:

IState doSomething(int i);

我有很多继承者,Astate, BState

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

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

,但不幸的是它没有帮助,因为所有的函数命名相同,有一种方法来写完整的函数名称与它的类名?

谢谢

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

writeToLog("current function is" __FUNCTION__);

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

请注意使用__FUNCTION__而不是__function__

对于c++可以使用的类名:在c++中有__CLASS__宏吗?

对于函数名,您总是可以使用__FUNCTION__宏。

如果我没记错的话,对于MSVC, __FUNCTION__宏也扩展到包含类名。

和强制链接:

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

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

__func__的标准要求为:

函数局部预定义变量func被定义为类似于

形式的定义
static const char __func__[] = "function-name ";
已经提供了

,其中function-name是实现定义的字符串。目前尚不清楚是否这样的变量具有不同于程序中任何其他对象的地址。

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