구조물의 변수 나 멤버와 일치 할 수있는 메타 바이블을 선언하는 데 사용하기에 올바른 유형은 무엇입니까?

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

  •  20-09-2019
  •  | 
  •  

문제

구조물의 변수 나 멤버와 일치 할 수있는 메타 바이블을 선언하는 데 사용하기에 올바른 유형은 무엇입니까?

예를 들어 다음 예제 소스 코드를 사용하십시오.

#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