void qsort (void *a, size_t n, size_t es, int (*compare)(const void *, const void *)
ここで、aは配列アドレスの先頭、nはsizeof配列、esは配列要素のサイズです。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*)a- (char*)0)% sizeof(long)==1
コードはかなり壊れているようです。マクロには少なくとも1つの構文エラーがあり、括弧がありません。また、(char *)a - (char *)0は、何かが欠けていない限り、何もしないでください。 as should(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