[완료] typeof 연산자를 대체하려면 어떻게 해야 하나요?
글쓴이: pride4ever / 작성시간: 수, 2011/04/20 - 10:17오전
#define list_for_each_entry(pos, head, member) \
for( pos = list_entry((head)->next, typeof(*pos), member); \
&pos->member != (head); \
pos = list_entry(pos->member.next, typeof(*pos), member) )
libusb를 arm에 포팅하고 있습니다.
컴파일러는 gcc가 아닌 armcc입니다.
컴파일 에러가 나길래 한참을 찾아보니 typeof가 원인이란걸 알았습니다.
(armcc는 typeof가 안되면 안된다고 하지 왜 이상한 에러를 낼까요..ㅡㅡ;)
찾아보니 typeof는 C 표준은 아니지만 gcc는 확장기능으로 제공한다고 하는군요.
armcc 는 이에 대한 자료가 없는걸로 보아 지원하지 않는것 같습니다.
그렇다면 저 코드를 어떻게 대체해야 할까요....?
에휴.... 산넘어 산이 끝없이 이어지네요.
감사합니다.
Forums:
*pos의 실제 타입을 list_entry의 두 번째
*pos의 실제 타입을 list_entry의 두 번째 인자에 하드 코딩으로 적어주시면 될 것 같습니다.
매크로는 타입마다 새로 정의해서 사용하시구요(list_for_each_entry_typed)
예를 들어 *pos 타입이 int형이면
이렇게요.
——
———
Life is a tragedy when seen in close-up, but a comedy in long-shot. - Chaplin, Charlie -
그냥... list_for_each_entry()
그냥... list_for_each_entry() 사용하는 곳을 모두 찾아서, 그 바로 앞에
해결 했습니다.
http://buzzan.thoth.kr/?mid=blog&document_srl=1935095
좀더 찾아보니 위에 정보가 있네요.
offsetof를 이용해서 바꿔주고 empty2fill 님 말씀처럼 구조체명을 하드코딩으로 적어줬더니 컴파일 됩니다.
과연 저게 동작할런지는.....^^
답글 달아주신 분들 고맙습니다.
댓글 달기