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;
}

运行输出:

相关推荐
写bug写bug2 分钟前
搞懂MyBatis拦截器的工作原理
java·后端·mybatis
Nuyoah11klay5 分钟前
华清远见25072班C语言学习day7
c语言·排序算法
Seven9710 分钟前
剑指offer-21、栈的压⼊、弹出序列
java
一只叫煤球的猫10 分钟前
讲讲ResponseEntity的前世今生和水土不服
java·后端·spring
架构师沉默14 分钟前
MyBatis 四大组件深度剖析:从原理到实战
java·后端·架构
点灯的棉羊14 分钟前
从C学C++(10)-string/vector/map的简单使用
c语言·c++
侧耳倾听11114 分钟前
Java的异常机制
java·开发语言
草莓熊Lotso20 分钟前
《吃透 C++ 类和对象(上):封装、实例化与 this 指针详解》
开发语言·c++·经验分享·笔记·其他
cccc来财38 分钟前
Spring循环依赖:三级缓存解析
java·后端·spring
·前路漫漫亦灿灿1 小时前
C++11-下
开发语言·c++