<div dir="ltr">On Wed, Jun 19, 2013 at 12:02 PM, Ed Cashin <span dir="ltr">&lt;<a href="mailto:ecashin@noserose.net" target="_blank">ecashin@noserose.net</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Yes, ignoring stuff like inline functions defined in headers, standard UNIX-like expectations would be for the header math.h to contain a function *prototype* that *declares* floor.<div>

<br></div><div>The library contains the compiled floor function *definition* as executable code for your architecture.  The source for the definition is part of glibc, probably a function body *defined* in a .c file.</div>


<div><br></div><div>Both the source and the compiled form of the function can be thought of as the implementation in different forms.  The declaration in the header is information that the compiler can use to make sure that the types of the function parameters and of the return value are right.  You can think of the header stuff as &quot;interface&quot; as opposed to &quot;implementation&quot;, but the C language and runtime aren&#39;t essentially modular, so you&#39;ll exhaust the usefulness of that metaphor if you go very deep.</div>

</blockquote><div><br></div><div style>Put another way... imagine math.* was actually part of your project, not a system library. In addition to including math.h, you&#39;d also need to tell the compiler to compile/link math.c. That extra step is still required, just instead of &quot;gcc math.c file.c&quot; you do &quot;gcc -lm file.c&quot;</div>

</div></div></div>