<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><div><font face="Calibri">/* The following is legal C but not C++: */</font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri">struct Foo_t;</font></div><div><font face="Calibri">typedef struct Foo_t Foo_t;</font></div><div><font face="Calibri">static struct Foo_t Foo; /* illegal C++; C forward/tentative definition */</font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri">int F1(void) { return *(int*)&Foo; }</font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri">struct Foo_t { int i; };</font></div><div><font face="Calibri">static Foo_t Foo = { 123 };</font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri">This is a reason that either</font></div><div><font face="Calibri">1) I "need" to make M3C.m3 "multi pass"</font></div><div><font face="Calibri">2) or at least buffer everything in memory</font></div><div><font face="Calibri">in multiple pieces and then concat at the end</font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri">  I could also make it less efficient:  </font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri">  struct Foo_t; /* segment */ </font></div><div><font face="Calibri">  typedef struct Foo_t Foo_t;  </font></div><div><font face="Calibri">  static struct Foo_t * /*const*/ Foo;  </font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri">  int F1(void) { return *(int*)&Foo; }  </font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri">  struct Foo_t { int i; };</font></div><div><font face="Calibri">  static Foo_t _Foo = { 123 };  </font></div><div><font face="Calibri">  static Foo_t* /*const*/ Foo = &_Foo;</font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri">But that seems unfortunate.</font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri">I will want to generate C++ at some point, for efficient portable exception</font></div><div><font face="Calibri">handling. But that comes later.</font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri">Also later, the C code needs a reordering in order to refer to fields in "segments".</font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri"> - Jay</font></div>                                         </div></body>
</html>