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

运行输出:

相关推荐
闻缺陷则喜何志丹4 分钟前
【剪枝 贪心 回溯】B4093 [CSP-X2021 山东] 发送快递|普及+
c++·算法·剪枝·贪心·洛谷
用户61204149221312 分钟前
C语言做的物联网设备数据采集模拟器
c语言·后端·敏捷开发
.ZGR.22 分钟前
C语言:数组的增删查改2.0
c语言·开发语言
漫漫不慢.25 分钟前
算法练习-二分查找
java·开发语言·算法
还是鼠鼠33 分钟前
《黑马商城》Elasticsearch基础-详细介绍【简单易懂注释版】
java·spring boot·spring·elasticsearch·搜索引擎·spring cloud·全文检索
牧羊人_myr1 小时前
Maven核心功能与项目构建详解
java·maven
R-G-B1 小时前
【18】C实战篇——C语言 文件读写【fputc、fgetc、fputs、fgets】
c语言·c语言文件读写·fputc·fgetc·fputs·fgets
Maple_land1 小时前
Linux进程第八讲——进程状态全景解析(二):从阻塞到消亡的完整生命周期
linux·运维·服务器·c++·centos
量子物理学1 小时前
Eclipse Mosquitto 在小内存下怎么修改配置文件
java·服务器·eclipse
ajassi20001 小时前
开源 C++ QT QML 开发(十一)通讯--TCP服务器端
c++·qt·开源