用于宣布可以匹配变量或结构中成员的METAVAR的正确类型是什么?

StackOverflow https://stackoverflow.com/questions/2043787

  •  20-09-2019
  •  | 
  •  

用于宣布可以匹配变量或结构中成员的METAVAR的正确类型是什么?

以以下示例源代码:

#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");
}

以下 语义补丁:

@@
identifier ptr;
//idexpression ptr;
//expression ptr;
expression E;
@@

ptr = malloc(E);
+if (ptr == NULL)
+       return;

ptr->s 除非分配不匹配,除非 expression ptr 用来。使用 expression 因为这对我来说似乎太广泛了。这是正确的,也是唯一的方法?

有帮助吗?

解决方案

通常,您想捕获任何LVALUE指针 - 但是,由于您只是匹配表达式分配值的位置 malloc, ,平淡的表达方式将使工作罚款(因为非计算机或非价值应使编译器抱怨)。

您要遇到的问题是表达式是否具有副作用,例如:

struct some_struct *a[10];
int i = 0;

a[i++] = malloc(sizeof(struct some_struct));
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top