堆栈中的匿名对象,在C?

我正在开发一个日志/跟踪单元(请不要指向现有的单元,这是为了获得与结果相同的体验).

要获得运行时调用堆栈跟踪,我们的想法是首先构造一个TraceObject实例,输入一个函数,它携带当前类和函数的信息.有点类似于:

TraceObject to( "MyClass", "myClassFunction" );

TraceObject的构造函数在每个线程堆栈上推送它,析构函数再次弹出它.因此可以查询堆栈以获得调用堆栈.

我让这个工作满意.但是,有一个小小的飞贼:对象.根据设计,它永远不会被该名称所引用.因此,它不需要具有名称,尤其是可能与客户端使用的任何标识符冲突的名称(或者,在_前缀的情况下,实现).

TL;博士

是否有可能在堆栈上创建一个匿名的非临时对象(即在函数返回之前会生存但没有标识符的对象),如果是,它将如何完成?

最佳答案
没有.

C中有匿名对象,临时对象是表达式的结果,但它们只存在于它们所在语句的上下文中.

如果你真的试图声明一个匿名对象,你会混淆解析器,它会认为你正在声明…一个函数!

但那么,有必要吗?

如果您接受使用宏来实际声明TraceObject,那么为每个跟踪使用宏非常简单;从而提供那里的阶级和功能.使用__func__或等效项,您可以提取类名和函数名(所需的字符串解析位,取决于编译器)并从那里开始工作.

当然,无论如何,您将为每条跟踪使用宏,因为您可能需要文件名和行号!

转载注明原文:堆栈中的匿名对象,在C? - 代码日志