Simple illustration: #include <stdio.h> #include <stdlib.h>
static char SI = 0; static int cmp(const void *a, const void *b) { puts("CALL cmp"); if ( *(int*)a == *(int*)b ) { puts("SET SI = 1"); SI = 1; return 0; } return ( *(int*)a > *(int*)b ) ? 1 : -1; } int main(int argn, char *argv[]) { int a[]={43,43}; SI = 0; qsort(a, sizeof(a)/sizeof(int), sizeof(int), cmp); if ( SI ) puts("OK"); else puts("BUG: SI==0"); return 0; } % icc -O2 -o 1 1.c && ./1 CALL cmp SET SI = 1 BUG: SI==0 % icc -O1 -o 1 1.c && ./1 CALL cmp SET SI = 1 OK -- Teodor Sigaev E-mail: [EMAIL PROTECTED] WWW: http://www.sigaev.ru/ ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend