J'ai decouvert une nouvelle possibilite des extensions GNU : Construction d'une fonction de callback a la volee parce que ca fait chier de le faire autrement !
#include <stdlib.h>
void f(int *tab, int n, int c) {
qsort (tab, n, sizeof(n), ({int cmp (int *a, int *b) { return *a < *b*c;}; &cmp;}));
}
int main () {
int tab[] = {4,2,5,6,7,-25,59,75};
int i;
const int n = sizeof(tab)/sizeof(tab[0]);
f(tab, n, -1);
void g() {
for (i = 0 ; i < n ; i ++)
printf ("%d ", tab[i]);
putchar ('\n');
}
g ();
f(tab, sizeof(tab)/sizeof(tab[0]), 1);
g ();
return 0;
}
Je vous laisse imaginer ce que ca donne lorsqu'on mixe ca avec des __attribute__((cleanup)) ou __attribute__((destructor)).