Каков правильный тип для использования метаобменимости, который может соответствовать любым переменным или членам структуры?Каков правильный тип для объявления метапарабельного, который может соответствовать любым переменным или членам структуры?
Возьмем, например, следующий пример исходного кода:
#include <stdio.h>
#include <stdlib.h>
struct some_struct {
int i;
char *s;
};
void test(void)
{
struct some_struct *ptr;
char *s;
s = malloc(100);
ptr = malloc(sizeof(struct some_struct));
ptr->s = malloc(100);
puts("done");
}
Со следующим semantic patch:
@@
identifier ptr;
//idexpression ptr;
//expression ptr;
expression E;
@@
ptr = malloc(E);
+if (ptr == NULL)
+ return;
ptr->s
распределение не соответствует, если expression ptr
не используется. Использовать expression
для этого, кажется, слишком широко для меня. Правильно ли это и единственный способ сделать это?
На самом деле просто «[я]» является выражением, а также, и я определенно хочу, чтобы поддержать это. См. Также http://lists.diku.dk/pipermail/cocci/2010-January/000628.html – hlovdal