vorbisfile.h causes compiler warnings in client code
Any code that includes vorbisfile.h, is compiled with warnings turned on but doesn't actually use the structs defined in the header file will generate warnings. The code which causes this is the static ov_callbacks structs: OV_CALLBACKS_DEFAULT, OV_CALLBACKS_NOCLOSE, OV_CALLBACKS_STREAMONLY and OV_CALLBACKS_STREAMONLY_NOCLOSE.
Many developers like to compile with warnings turned on and many even like to use -Werror (which turns warnings into errors) during development. However, any code that includes <vorbisfile.h> cannot be commpiled with -Werror.
Monty's comment in the file says that these structs are defined as static as a workaround required on windows. Supporting windows is a good thing, but the current solution is not good enough.
One possible solution would be to enclose the definitions of these structs inside:
#ifdef EXPOSE_OV_CALLBACKS
#endif
People who use these structs can then define EXPOSE_OV_CALLBACKS before including vorbisfile.h.
It would be interesting to hear from windows developers who might be able to come up with other possible solutions to this problem.