코드가 제대로 작동하더라도 호환되지 않는 포인터 유형 오류 경고가 표시됩니다. 우선, 여기 내 코드의 단순화 된 버전입니다 :C : & (void *) 및 void **가 호환되지 않는 이유는 무엇입니까?
typedef struct {
int field1;
int field2;
} my_struct;
void some_function(void **data){
// do something with *data
}
int main(int argc, char *argv[]){
my_struct *ptr = malloc(sizeof(my_struct));
ptr->field1 = 5;
ptr->field2 = 17;
some_function(&ptr);
}
my_struct
유형은 하나의 예이지만, 실제로 그렇게 some_func
이 void**
보다는 my_struct**
에 동의해야합니다 여러 유형을 사용하고 있습니다. 위의 방법으로 some_func
을 호출 할 때마다 다음 경고를 수신하지만 내 코드는 올바르게 작동합니다.
이 유형이 호환되지 않는 이유가 확실하지 않아 어떤 식 으로든 경고를 삭제하려고합니다. 해답이 무엇인지, 가능한 경우 경고를 제거하는 방법을 설명하십시오 (cpp 지시어, 아마도?). 감사!
참고 :이 같은 코드의 조각을 고려 (
void*
모든 포인터 타입의 "기본 클래스"처럼 작동). '&'는 형식의 일부가 아닌 연산자입니다. –@Oli : C에서 의미는 꽤 모호합니다. :) (C++에서는 물론 다른 것을 의미 할 수도 있습니다.) –
'& (void *)'에 의해, 나는'& (some_pointer)'의 결과를 의미했습니다. 빠른 답장을 보내 주셔서 감사합니다 - 방금 C로 시작했습니다. –