У меня есть C-код, который выглядит следующим образом.Известно, что функция takeString()
становится владельцем аргумента malloc-ed указателя.Статический анализатор Clang будет жаловаться, что string
- это потенциальная утечка памяти при return 0
в main()
.Только для кода C, какую аннотацию я могу применить, в идеале в объявлении takeString()
, которая сообщит Clang Static Analyzer, что string
не будет пропущена?
#define OwnershipTaken(type) type
void takeString (OwnershipTaken(char *) string) {
// ... eventually frees
}
int main(int argc, const char * argv[]) {
char *string = strdup ("This is a string");
takeString (string);
return 0;
}
Более общий вопросгде я могу увидеть список всех возможных аннотаций, которые понимает статический анализатор Clang?
Я пытался использовать аннотации, подобные void __attribute((ownership_takes(malloc, 1))) takeString(char *);
, но это, похоже, не меняет результат.Этот ответ отмечает, что unix.MallocWithAnnotations
необходимо включить.Как это делается в Xcode?Однако текущая версия XCode, кажется, не включает unix.MallocWithAnnotations
.