【发布时间】:2014-03-19 19:49:31
【问题描述】:
是否有任何预定义的宏来识别调用函数。
打印我们使用的当前函数名
printf("%s", __FUNCTION__);
如果函数a调用b并且控制在b中,那么有没有办法找出a?
【问题讨论】:
-
宏在编译时被解析,无法知道哪个函数调用了当前函数。在运行时,有一些环境库可以显示调用堆栈,如下所示:stackoverflow.com/a/691742/104774
-
不过,这是一个疯狂的想法。 (1) 创建一个“调用堆栈”数组,(2) 添加function entry/exit codes 以更新堆栈,(3) .. 利润。不过,这取决于您的编译器。
-
@Jongware (特定于编译器的)前置/后置函数是一个好主意,除非它们会面临同样的问题(因为 FUNCTION 将是那些函数,而不是调用者)。您将需要一个 pre/post 宏,这可能通过简单的编译器标志不存在。