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

运行输出:

相关推荐
下午见。8 分钟前
C语言结构体入门:定义、访问与传参全解析
c语言·笔记·学习
算法与编程之美20 分钟前
理解Java finalize函数
java·开发语言·jvm·算法
怕什么真理无穷27 分钟前
C++面试4-线程同步
java·c++·面试
lkbhua莱克瓦2429 分钟前
Java基础——常用算法5
java·开发语言·笔记·github
cs麦子38 分钟前
C语言--函数(function)
c语言·开发语言
牢七38 分钟前
javan小案例。
java
极智-99642 分钟前
C语言编译器?【图文详解】Visual Studio安装配置编译运行C语言?C语言编译器下载安装?
c语言·visual studio·c语言编译器·c代码运行·visual studio下载·c编程·c语言下载
是苏浙44 分钟前
零基础入门C语言之C语言实现数据结构之顺序表
c语言·开发语言·数据结构
星释1 小时前
Rust 练习册 :Luhn与校验算法
java·算法·rust
代码雕刻家1 小时前
C语言中关于类型转换不匹配的解决方案
c语言·开发语言·算法