The paragraph on pointer differences (ANSI C99 6.5.6§9) states that : "both shall point to elements of the same array object, or one past the last element of the array object […] The size of the result is implementation-defined, and its type (a signed integer type) is ptrdiff_t".
So, for an array of function pointer that would be legal behaviour, but for pointers to plain functions, it is undefined behaviour.