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

运行输出:

相关推荐
是梦终空几秒前
JAVA毕业设计210—基于Java+Springboot+vue3的中国历史文化街区管理系统(源代码+数据库)
java·spring boot·vue·毕业设计·课程设计·历史文化街区管理·景区管理
哎呦,帅小伙哦7 分钟前
Effective C++ 规则41:了解隐式接口和编译期多态
c++·effective c++
基哥的奋斗历程25 分钟前
学到一些小知识关于Maven 与 logback 与 jpa 日志
java·数据库·maven
m0_5127446425 分钟前
springboot使用logback自定义日志
java·spring boot·logback
十二同学啊29 分钟前
JSqlParser:Java SQL 解析利器
java·开发语言·sql
老马啸西风41 分钟前
Plotly 函数图像绘制
java
DARLING Zero two♡41 分钟前
【初阶数据结构】逆流的回环链桥:双链表
c语言·数据结构·c++·链表·双链表
9毫米的幻想42 分钟前
【Linux系统】—— 编译器 gcc/g++ 的使用
linux·运维·服务器·c语言·c++
方圆想当图灵43 分钟前
缓存之美:万文详解 Caffeine 实现原理(上)
java·缓存
Cando学算法1 小时前
Codeforces Round 1000 (Div. 2)(前三题)
数据结构·c++·算法