2007年8月19日 星期日

qsort運用(II)

以下範例是將一個 integer 陣列做 qsort:
int compare(const void *pa,const void *pb);

int main(){
qsort(diff,num-1,sizeof(int),compare);
}

int compare(const void *pa,const void *pb){
int a,b;
a=*(int *)pa;
b=*(int *)pb;
if(a < b)
return -1;
}
else if(a==b){
return 0;
}
else{
return 1;
}
}
qsort限制比較函式中,所傳參數必須為(const void *, const void*)也就是一個 void 指標,在 compare 函式中,不能直接拿*pa和*pb來作比較,會出現有關void的blabla...錯誤,因此必須轉為其他型態,先以(int *)強制轉型為 int 指標,再利用 * 運算子來存取儲存於其中的 integer,便可成功編譯。

2007年8月6日 星期一

Using long long with MinGW

long long是 C99的標準,可以處理-((2^63)-1)~(2^63)-1的數字,正常使用方法是 %lld /u/x,但如果使用MinGW來編譯的話,必須用%I64d /u/x 才能正常使用

The printf() implementation used by MinGW (which is provided by msvcrt.dll) uses its own format specifier for 64-bit integers as documented in MSDN: http://msdn.microsoft.com/library/en-us/vccore98/HTML/_crt_size_and_distance_specification.asp. For example, %I64d will format a (decimal) long long and %I64u will format an unsigned long long.

參考資料:http://www.mingw.org/MinGWiki/index.php/long%20long