gcc 3.2.2 warning: dereferencing `void *' pointer

down7town의 이미지

gcc 3.2.2를 사용하는데, C에서

now_element->data->time

이런형태로 포인터를 넘겨주니 계속해서 저런 워닝을 띄우내요..
중간에 형으로 받아서 넘겨주면 워닝은 없어지는것 같은데, 무시해도 되는건지
궁금합니다.

Elmtdata *elementdata;
St_time *sttime;

elementdata=now_element->data;
sttime=elementdata->time;

꼭 이렇게 중간 과정이 필요한지...?

eminency의 이미지

void *형이 기본적으로 데이타 타입이 지정되어 있지 않기 때문에 나오는 warning인 것으로 압니다...

중간과정으로 따로 변수를 선언하는 것 대신 다음처럼 casting하셔도 가능합니다.

(St_time *)((Elmtdata *)now_element->data)->time

다만 너무 길어지면 보기에 안 좋으므로 크게 문제가 되지 않으면 변수 선언해서 assign하는 것도 괜찮다고 생각합니다.

근데 무시해도 되는건지는 잘 모르겠네요... casting이든 assign이든 제대로 형변환이 되어 있지 않다면 나중에 데이타가 꼬이는 일이 생길 수도 있지 않을까요?

노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5