title: Hide type definition in C
body: <p>I have a <code>.c</code> file (a library of functions) with a function and a definition like this:</p>
  
  <pre><code>typedef long double big;
  big foo(int x) { ... }
  </code></pre>
  
  <p>I want to create an interface of this library, an <code>.h</code>. So I do:</p>
  
  <pre><code>typedef long double big;
  big foo(int);
  </code></pre>
  
  <p>and remove the <code>typedef long double big;</code> from the <code>.c</code> file. But by doing so I give away the type definition of <code>big</code> in my interface, so it's not really a clean interface. Any ideas how to fix that?</p>
  
  <p>I know I could do this in my <code>.c</code> file:</p>
  
  <pre><code>struct foo {
    long double;
  };
  </code></pre>
  
  <p>and then in the <code>.h</code> file do:</p>
  
  <pre><code>typedef struct foo big;
  big foo(int);
  </code></pre>
  
  <p>But it seems waste to create a <code>struct</code> for just one field, plus I should use the <code>.</code> operator whenever I want to read a <code>big</code>.</p>