FYI, many readers of Usenet *will not* go to a Web page just because
a pseudonymous poster asks them to, especially when the page has such
an obviously machine-generated URL. (And perhaps doubly so when the
URL is actually the URL of an HTML page, despite the ".gif" ending.
That's just unnecessary.)
Note to prospective Web-goers: I used 'wget' to grab the GIF, so if
there's any malicious code on that Web page, I didn't encounter it.
Don't think I'm endorsing the page.
Okay, now on to your question. Mistakes ordered from most significant
to least significant:
* All your ".h" files are missing the include guards.
http://en.wikipedia.org/wiki/Include_guard
* "get_data.h" refers to DATA, so it needs to #include "defs.h".
* "get_data.c" refers to get_data(), so it needs to #include "get_data.h".
* "DATA", in all caps, looks like a preprocessor macro. It is better to
use something non-macro-ish, such as "Data" or "data_t". Except...
* The use of "typedef" is superfluous, and most comp.lang.c regulars
will counsel you not to use it. Give the struct a tag, such as "struct
data", and use that instead.
* You spelled "definitions" as "definitons" in one place.
* "float" is rarely used; "double" would be more newbie-friendly, if your
goal is to show what real code looks like.
* "Header files should only contain declarations." should read
"Header files should contain only declarations." (And macro definitions,
and comments.)
* Burn your GIFs and use PNG instead; it's cooler.
HTH,
-Arthur