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

运行输出:

相关推荐
ss2734 分钟前
Java并发编程:DelayQueue延迟订单系统
java·python·算法
SHERlocked936 分钟前
摄像头 RTSP 流视频多路实时监控解决方案实践
c++·后端·音视频开发
wcy_10119 分钟前
七大软件设计原则
java·设计规范
invicinble11 分钟前
jar包在执行的时候需要关注的细节(提供一个解构jvm问题的视角)
java·jvm·jar
麦芽糖021913 分钟前
SSE介绍及使用(Server-Send Events)
java
alan072117 分钟前
【Java + Elasticsearch全量 & 增量同步实战】
java·elasticsearch·jenkins
hashiqimiya30 分钟前
后端springboot的接收前端发来的数据反序列化原理
java
tang&1 小时前
哈希碰撞攻防战:C++闭散列与开散列实现全解析
c++·哈希算法
眠りたいです1 小时前
现代C++:C++11并发支持库
开发语言·c++·多线程·c++11·c++并发支持库
小灰灰搞电子1 小时前
Rust可以取代C++么?
开发语言·c++·rust