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

运行输出:

相关推荐
C雨后彩虹16 小时前
任务最优调度
java·数据结构·算法·华为·面试
heartbeat..16 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
Jing_jing_X16 小时前
AI分析不同阶层思维 二:Spring 的事务在什么情况下会失效?
java·spring·架构·提升·薪资
SmartRadio17 小时前
CH585M+MK8000、DW1000 (UWB)+W25Q16的低功耗室内定位设计
c语言·开发语言·uwb
元Y亨H18 小时前
Nacos - 服务发现
java·微服务
微露清风18 小时前
系统性学习C++-第十八讲-封装红黑树实现myset与mymap
java·c++·学习
dasi022718 小时前
Java趣闻
java
CSARImage18 小时前
C++读取exe程序标准输出
c++
一只小bit18 小时前
Qt 常用控件详解:按钮类 / 显示类 / 输入类属性、信号与实战示例
前端·c++·qt·gui
阿波罗尼亚19 小时前
Tcp SSE Utils
android·java·tcp/ip