c语言中类似c++自动析构的实现

cpp 复制代码
#include <stdio.h>

#define _MESA_TRACE_SCOPE_VAR_CONCAT(name, suffix) name##suffix
#define _MESA_TRACE_SCOPE_VAR(suffix)                                        \
   _MESA_TRACE_SCOPE_VAR_CONCAT(_mesa_trace_scope_, suffix)

/* This must expand to a single non-scoped statement for
 *
 *    if (cond)
 *       _MESA_TRACE_SCOPE(...)
 *
 * to work.
 */
#define _MESA_TRACE_SCOPE(name)                                              \
   int _MESA_TRACE_SCOPE_VAR(__LINE__)                                       \
      __attribute__((cleanup(_mesa_trace_scope_end), unused)) =              \
         _mesa_trace_scope_begin(name)

static inline int
_mesa_trace_scope_begin(const char *name)
{
    printf("start\n");
   return 0;
}

static inline void 
_mesa_trace_scope_end(int *scope)
{
    printf("end\n");
}

#define MESA_TRACE_FUNC() _MESA_TRACE_SCOPE(__func__)


int main() {
    MESA_TRACE_FUNC();
	printf("main\n");
    return 0;
}

运行输出:

相关推荐
有梦想的攻城狮1 小时前
spring中的@Configuration注解详解
java·后端·spring·configuration·配置类
red_redemption1 小时前
Spring Boot + MyBatis-Plus 的现代开发模式
java·spring boot·mybatis
苹果酱05671 小时前
iview内存泄漏
java·vue.js·spring boot·mysql·课程设计
Kay_Liang1 小时前
探究排序算法的奥秘(下):快速排序、归并排序、堆排序
java·数据结构·c++·python·算法·排序算法
forestsea2 小时前
Java Class类文件结构
java·开发语言
xun-ming2 小时前
Java导出带图片的Excel
java·excel·easypoi·导出·excel带图片
24k小善2 小时前
Flink维表深度解析
java·大数据·flink·云计算
凭君语未可3 小时前
Spring 框架中的常见注解讲解
java·spring
鱼嘻3 小时前
数据结构------C语言经典题目(6)
linux·c语言·开发语言·数据结构·算法
彷徨而立3 小时前
【C/C++】字符串拷贝方法
c++