gpt4 book ai didi

c - 如何使用清除属性初始化变量?

转载 作者:太空狗 更新时间:2023-10-29 17:25:01 24 4
gpt4 key购买 nike

有没有办法用 cleanup 编译器属性来初始化一个变量?还是必须在声明变量后设置值?

我试过将 cleanup 属性放在 = malloc(10); 前面,就像下面的例子一样,放在 = malloc(10); 后面 但都不编译。

#include <stdio.h>
#include <stdlib.h>

static inline void cleanup_buf(char **buf)
{
if(*buf == NULL)
{
return;
}

printf("Cleaning up\n");

free(*buf);
}

#define auto_clean __attribute__((cleanup (cleanup_buf)));

int main(void)
{
char *buf auto_clean = malloc(10);
if(buf == NULL)
{
printf("malloc\n");
return -1;
}

return 0;
}

在一行中使用cleanup 和初始化变量是否有不同的语法?或者我是否必须像下面的示例一样在声明变量后设置值?

#include <stdio.h>
#include <stdlib.h>

static inline void cleanup_buf(char **buf)
{
if(*buf == NULL)
{
return;
}

printf("Cleaning up\n");

free(*buf);
}

/* Use this attribute for variables that we want to automatically cleanup. */
#define auto_clean __attribute__((cleanup (cleanup_buf)));

int main(void)
{
char *buf auto_clean;

buf = malloc(10);
if(buf == NULL)
{
printf("malloc\n");
return -1;
}

return 0;
}

最佳答案

只是打错了。只是……

//#define auto_clean __attribute__((cleanup (cleanup_buf)));
// ^
#define auto_clean __attribute__((cleanup (cleanup_buf)))

关于c - 如何使用清除属性初始化变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32001002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com