Обсуждение: Is this portable?
Can I declare a struct in a function's declaration section? Something like this: static void foobar(void) {struct foo { Oid foo; int bar;}; struct foo baz; baz.foo = InvalidOid;baz.bar = 42; } I tried here and GCC does not complain, with -std=c89 -pedantic. -- Alvaro Herrera http://www.CommandPrompt.com/ PostgreSQL Replication, Consulting, Custom Development, 24x7 support
Alvaro Herrera wrote: > Can I declare a struct in a function's declaration section? Something > like this: > > static void > foobar(void) > { > struct foo { > Oid foo; > int bar; > }; > > struct foo baz; > > baz.foo = InvalidOid; > baz.bar = 42; > > } > > I tried here and GCC does not complain, with -std=c89 -pedantic. Sure. -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://www.enterprisedb.com + If your life is a hard drive, Christ can be your backup. +
Alvaro Herrera wrote: > Can I declare a struct in a function's declaration section? Something > like this: > > static void > foobar(void) > { > struct foo { > Oid foo; > int bar; > }; > > struct foo baz; > > baz.foo = InvalidOid; > baz.bar = 42; > > } > > I tried here and GCC does not complain, with -std=c89 -pedantic. > It works fine with Sun Studio 11. Zdenek
Zdenek Kotala <Zdenek.Kotala@Sun.COM> writes: > Alvaro Herrera wrote: >> Can I declare a struct in a function's declaration section? > It works fine with Sun Studio 11. AFAICT it's required by the original K&R C book. regards, tom lane
"Tom Lane" <tgl@sss.pgh.pa.us> writes: > Zdenek Kotala <Zdenek.Kotala@Sun.COM> writes: >> Alvaro Herrera wrote: >>> Can I declare a struct in a function's declaration section? > >> It works fine with Sun Studio 11. > > AFAICT it's required by the original K&R C book. IIRC there's something odd about the scope of the declared struct label. Something like it previously extended to the end of the file but post-ANSI was limited to the scope it's declared in (including very limited scopes where it would be useless such as in function parameters). -- Gregory Stark EnterpriseDB http://www.enterprisedb.com
Gregory Stark wrote: > "Tom Lane" <tgl@sss.pgh.pa.us> writes: > > > Zdenek Kotala <Zdenek.Kotala@Sun.COM> writes: > >> Alvaro Herrera wrote: > >>> Can I declare a struct in a function's declaration section? > > > >> It works fine with Sun Studio 11. > > > > AFAICT it's required by the original K&R C book. > > IIRC there's something odd about the scope of the declared struct label. > > Something like it previously extended to the end of the file but post-ANSI was > limited to the scope it's declared in (including very limited scopes where it > would be useless such as in function parameters). Hmm, thanks everybody. I was just going to say "bummer!" because I needed to build a qsort comparator for these, but then I realized that it's better if I keep worker and launcher database structs separate -- the only field they use in common is the Oid anyway. -- Alvaro Herrera http://www.CommandPrompt.com/ PostgreSQL Replication, Consulting, Custom Development, 24x7 support
Gregory Stark <stark@enterprisedb.com> writes: > IIRC there's something odd about the scope of the declared struct label. > Something like it previously extended to the end of the file but post-ANSI was > limited to the scope it's declared in (including very limited scopes where it > would be useless such as in function parameters). I think you might be thinking of the use of a previously unreferenced "struct foo" in a function declaration's parameter list, which is something that did change (and so gcc warns about it). But within a block is not that case. regards, tom lane