К сожалению, в C нет никаких интеллектуальных указателей.. но возможно ли построить макрос, который объявляет переменную переменной и вызывать вызов функции с этой переменной в качестве входной переменной после выхода из области, в которой была объявлена переменная?
Извините за длинную фразу, но я работаю над ядром xnu, где у вас много элементов, у которых есть встроенные счетчики ссылок, и не нужно забывать об исправлении этого элемента, когда это делается с его помощью, чтобы избежать утечек памяти.
Например, если у меня есть следующий тип proc_t
:
struct proc;
typedef struct proc * proc_t;
Я хочу объявить переменную стека на основе этого типа в пределах области видимости, например:
{
proc_t_release_upon_exit proc_t proc_iter = proc_find(mypid);
//the rest of the code in this scope
}
После препроцессора проанализируйте макрос и перед компиляцией, следующий код, который я ожидаю получить:
{
proc_t myproc = proc_find(mypid)
//the rest of the code in scope
proc_rele(myproc);
}
Есть ли способ определить такой макрос, как в C?