title: error: incompatible types when initializing type 'struct taus88_t *' using type 'taus88_t'|?
body: <p>I'm trying to compile the following C program using GCC and I'm getting an error
  on line seven because the type <code>taus88_t*</code> is somehow not getting returned properly from the initializing function call called <code>make_taus88(seed);</code>?</p>
  
  <p><code>error: incompatible types when initializing type 'struct taus88_t *' using type 'taus88_t'|</code></p>
  
  <p>I've tried using <code>taus88_t TAUS88 = make_taus88(6346456);</code> but that gives more errors/warnings.</p>
  
  <pre><code>taus88main.c||In function 'main':|
  taus88main.c|8|error: incompatible type for argument 1 of 'taus88u32'|
  taus88.h|21|note: expected 'struct taus88_t *' but argument is of type 'taus88_t'|
  taus88main.c|9|error: incompatible type for argument 1 of 'taus88f32'|
  taus88.h|22|note: expected 'struct taus88_t *' but argument is of type 'taus88_t'|
  taus_88_cpp\taus88main.c|9|warning: unused variable 'numberf32'|
  taus_88_cpp\taus88main.c|8|warning: unused variable 'numberu32'|
  </code></pre>
  
  <p>The project is in 3 files below.</p>
  
  <p>taus88main.c</p>
  
  <pre><code>#include "taus88.h"
  #include &lt;stdint.h&gt;
  
  int main()
  {
  
      taus88_t* TAUS88 = make_taus88(6346456);
      u32 numberu32 = taus88u32(TAUS88);
      f32 numberf32 = taus88f32(TAUS88);
  
      return 0;
  }
  </code></pre>
  
  <p>taus88.h</p>
  
  <pre><code>#ifndef _COMMON_TAUS88_H
  #define _COMMON_TAUS88_H
  
  #include &lt;stdint.h&gt;
  typedef int8_t    i8;
  typedef int16_t   i16;
  typedef int32_t   i32;
  typedef int64_t   i64;
  
  typedef uint8_t   u8;
  typedef uint16_t  u16;
  typedef uint32_t  u32;
  typedef uint64_t  u64;
  typedef float  f32;
  typedef double f64;
  
  typedef struct {u32 s1, s2, s3;} taus88_t;
  
  taus88_t make_taus88(u32 seed);
  u32 taus88u32(taus88_t *t);
  f32 taus88f32(taus88_t *t);
  
  #endif
  </code></pre>
  
  <p>taus88.c</p>
  
  <pre><code>#include &lt;stdint.h&gt;
  #include "taus88.h"
  
  taus88_t make_taus88(u32 seed)
  {
    taus88_t t;
    t.s1 = 1243598713U ^ seed; if (t.s1 &lt;  2) t.s1 = 1243598713U;
    t.s2 = 3093459404U ^ seed; if (t.s2 &lt;  8) t.s2 = 3093459404U;
    t.s3 = 1821928721U ^ seed; if (t.s3 &lt; 16) t.s3 = 1821928721U;
    return t;
  }
  
  u32 taus88u32(taus88_t *t)
  {
    t-&gt;s1 = ((t-&gt;s1 &amp;  -2) &lt;&lt; 12) ^ (((t-&gt;s1 &lt;&lt; 13) ^  t-&gt;s1) &gt;&gt; 19);
    t-&gt;s2 = ((t-&gt;s2 &amp;  -8) &lt;&lt;  4) ^ (((t-&gt;s2 &lt;&lt;  2) ^  t-&gt;s2) &gt;&gt; 25);
    t-&gt;s3 = ((t-&gt;s3 &amp; -16) &lt;&lt; 17) ^ (((t-&gt;s3 &lt;&lt;  3) ^  t-&gt;s3) &gt;&gt; 11);
    return t-&gt;s1 ^ t-&gt;s2 ^ t-&gt;s3;
  }
  
  f32 taus88f32(taus88_t *t)
  {
    union {u32 i ; f32 f ;} u;
    u.i = 0x3F800000 | (taus88u32(t) &gt;&gt; 9);
    return u.f - 1.0;
  }
  </code></pre>