The reason is the Arduino IDE transforms your code into the following code. The function prototype for testme() hasn't been defined before the compiler sees a call to it.
Thanks, there seems to be a couple solutions. I'm curious, what does defining char foo; do?
Putting in a function prototype works also, what I don't understand is how my sketch is compiling differently depending on wheher I comment out #define TESTFEED or not. It seems to me it would look the same, except that the byte mac[] is different because it's in an ifdef statement. Clearly it's doesn't compile the same, but I don't understand why.
The IDE has trouble determining where to add the stuff it adds. It adds all its stuff after the first executable statement that it sees, before the preprocessor has done its magic.
Typically, this is the first thing to do, since you almost always have #include statements or code at the start.
Starting the sketch with conditional compilation code is not the normal thing to do.
What the char foo; statement does is define a proper, unconditional, insertion point for the IDE.