我创建了一对函数:
void destroy_foo(void *ptr);
void *create_foo(void);
顾名思义,这些功能类似于malloc
和free
。我想使用malloc
gcc 函数属性来通知编译器这种关系,以便此代码会发出警告-fanalyzer
:
void *ptr = create_foo();
destroy_foo(ptr);
destroy_foo(ptr);
按照上述链接中的示例,我做了
void *create_foo(void) __attribute__ ((malloc (destroy_foo)));
虽然 gcc (11.4.0) 对此没问题,但 clang (14.0.0) 抱怨
error: 'malloc' attribute takes no arguments
void *create_foo(void) __attribute__ ((malloc (destroy_foo)));
^
我的理解是 gcc 属性与 clang 配合得很好。
GCC目前实施的形式有:
它们记录在通用函数属性中。
Clang 似乎在这场比赛中落后了,并且只实现了第一种形式:
Clang 中的属性