void qsort (void *a, size_t n, size_t es, int (*compare)(const void *, const void *)
여기서 a는 배열 주소의 시작이고, n은 sizeof 배열이며, es는 sizeof 배열 요소입니다.C 코드에서이 코드의 의미는 무엇입니까?
내가 이해할 수없는 C에서 qsort의 소스 코드를 읽었습니다. 코드는 다음과 같습니다.
#define SWAPINT(a,es) swaptype = ((char*)a- (char*)0 % sizeof(long) || \
es % sizeof(long) ? 2: es == sizeof(long)? 0 : 1
나는하여이 매크로,
if(((char*)a- (char*)0)% sizeof(long))==1 || es % sizeof(long)==1)
swaptype = 2;
else if(es== sizeof(long))
swaptype = 0;
else
swaptype = 1;
을 해석하지만 형식 변환이 구현 된 이유는, (숯불 *)는 이해가 안 돼요.
이 줄의 의미는 무엇입니까?
(char*)a- (char*)0)% sizeof(long)==1
코드가 매우 손상된 것 같습니다. 매크로에 적어도 하나 이상의 구문 오류가 있습니다 (괄호가 누락되었습니다). 또한 누락 된 것이 없으면 (char *) a - (char *) 0은 no-op 여야합니다. 마찬가지로 (char *) 0 % sizeof (long). – jforberg
'(char *) 0 % sizeof (long)'는 포인터 타입이 산술 타입이 아니기 때문에 의미가 없습니다. 이것이 무엇이든, 이것은 C를 따르지 않습니다.이 코드를 어디에서 찾았습니까? 그리고 올바르게 복사 했습니까? –
'%'는'-' 때문에'(char *) a- (char *) 0 % sizeof (long)'는'(char *) a - ((char *) 0 % sizeof (long))'입니다. 확실히'((char *) a- (char *) 0) % sizeof (long)'이 필요했습니다. – chux