text: Lets take qsort()'s comparison callback function as an example
  int (*compar)(const void *, const void *)
  What happens when the result of the comparison function depends on the current value of a variable? It appears my only two options are to use a global var (yuck) or to wrap each element of the unsorted array in a struct that contains the additional information (double yuck).
  With qsort() being a standard function, I'm quite surprised that it does not allow for additional information to be passed in; something along the lines of
  execv()'s NULL-terminated
  char *const argv[] argument.
  The same thing can be applied to other functions which define a callback that leave no headroom for additional parameters,
  ftw() &
  nftw() being two others I've had this problem with.
  Am I just "doing it wrong" or is this a common problem and chalked up to an oversight with these types of callback function definitions?
  EDIT
  I've seen a few answers which say to create multiple callback functions and determine which one is appropriate to pass to
  qsort(). I understand this method in theory, but how would you apply it in practice if say I wanted the comparison callback function to sort an array of ints depending on how close the element is to a variable 'x'?. It would appear that I would need one callback function for each possible value of 'x' which is a non-starter.
  Here is a working example using the global variable 'x'. How would you suggest I do this via multiple callback functions?
  #include <stdint.h> #include <stdio.h> #include <math.h> int bin_cmp(const void*, const void*); int x; int main(void) { int i; int bins[6] = { 140, 100, 180, 80, 240, 120 }; x = 150; qsort(bins, 6, sizeof(int), bin_cmp); for(i=0; i < 6; i++) printf("%d ", bins[i]); return 0; } int bin_cmp(const void* a, const void* b) { int a_delta = abs(*(int*)a - x); int b_delta = abs(*(int*)b - x); if ( a_delta == b_delta ) return 0; return a_delta < b_delta ? -1 : 1; }
  Output
  140 180 120 100 80 240