less는 주소로 비교하는 게 아니라 사용자가 인자로 주는 함수 포인터예요
타입에 관계 없이 비교 가능해야 해서 void *를 쓴 거고, 비교 함수를 구현할 때는 캐스팅해서 비교하는 로직으로 넣어야 해요
avltree_test.c에 uintptr_t로 캐스팅해서 비교하는 less의 예시가 있어요
9rum(msh01170)2021-05-11 14:25
답글
uintptr_t 로 캐스팅하면 결국엔 주소값으로 비교하는 거잖아. dereference 한 값으로 비교해야 하지 않겠어? 그러면 void* 도 못 쓰겠지만
익명(202.176)2021-05-11 17:22
답글
deference해서 값 비교하는 건 데이터의 주소를 보낼 때이고, 테스트에서는 uintptr_t 값을 void *로 캐스팅만 해서 넣기 때문에 다시 uintptr_t로 캐스팅해서 바로 비교하면 됩니당
9rum(msh01170)2021-05-11 17:25
답글
내가 자세히 안 봤네. 친절한 설명 고마워. dereference 한 값을 void* 로 캐스팅 할 수 있다는 건 처음 알았네
less 가 주소로 비교하는데 일부러 그런 거?
less는 주소로 비교하는 게 아니라 사용자가 인자로 주는 함수 포인터예요 타입에 관계 없이 비교 가능해야 해서 void *를 쓴 거고, 비교 함수를 구현할 때는 캐스팅해서 비교하는 로직으로 넣어야 해요 avltree_test.c에 uintptr_t로 캐스팅해서 비교하는 less의 예시가 있어요
uintptr_t 로 캐스팅하면 결국엔 주소값으로 비교하는 거잖아. dereference 한 값으로 비교해야 하지 않겠어? 그러면 void* 도 못 쓰겠지만
deference해서 값 비교하는 건 데이터의 주소를 보낼 때이고, 테스트에서는 uintptr_t 값을 void *로 캐스팅만 해서 넣기 때문에 다시 uintptr_t로 캐스팅해서 바로 비교하면 됩니당
내가 자세히 안 봤네. 친절한 설명 고마워. dereference 한 값을 void* 로 캐스팅 할 수 있다는 건 처음 알았네