티스토리 뷰

Daylogs/C

void 포인터 캐스팅 시 오류

ohgyun 2013. 10. 21. 22:02


발생일: 2013.10.19

문제:
며칠 전부터 와이프와 함께 하루에 한 문제씩 알고리즘을 풀기로 했다.
와이프는 자바로, 난 C로. ㅎㅎ

알고스팟(http://algospot.com/)에서 한 문제씩 골라서 풀어나가기 시작하고 있는데,
C는 책으로만 읽은 터라 삽질이 많다. -_-;

정렬을 위해 `qsort()`의 파라미터로 문자열 비교 함수를 전달하려고 하는데,
로컬에선 정상적으로 수행되는 것이 채점하는 서버에선 아래와 같은 컴파일 오류가 난다.

invalid conversion from ‘const void*’ to ‘const int*’

뭔가 문제일까...?


해결책:
포인터를 형변환할 때의 문법이 컴파일러마다 약간씩 다른 모양이다.

난 `gcc`로 컴파일하고 있었는데, 채점 서버는 `g++` 컴파일러를 사용하고 있었다.

컴파일 에러가 난 코드는 아래와 같다.

int compare(const void* a, const void* b) {
  const int* arg1 = a;
  const int* arg2 = b;

  return *arg1 - *arg2;
}


검색해보니, C++ 컴파일러에선 선언 이후에 형변환을 해줘야 하고,

형변환하는 타입을 명시적으로 써줘야 한단다.


아래처럼 수정하면 `g++` 컴파일러에서도 오류 없이 수행된다.


int compare(const void* a, const void* b) {

  const int* arg1;

  const int* arg2;


  arg1 = (int*) a;

  arg2 = (int*) b;


  return *arg1 - *arg2;

}



반응형
댓글
공지사항