On Mon, 2 Oct 2006, Tom Lane wrote: > Jeremy Drake <[EMAIL PROTECTED]> writes: > > The errors I got on this file were: > > 1>bootparse.tab.c(1065) : error C2449: found '{' at file scope (missing > > function header?) > > I looked at this. Line 1065 is the left brace starting yyparse(). On > my Fedora Core 5 box with Bison 2.1 installed, the stuff leading up to > it is > > #ifdef YYPARSE_PARAM > ... some uninteresting stuff, since we don't define YYPARSE_PARAM ... > #else /* ! YYPARSE_PARAM */ > #if defined (__STDC__) || defined (__cplusplus) > int > yyparse (void) > #else > int > yyparse () > > #endif > #endif > { > > But lookee here, your Windows-built version has > > #ifdef YYPARSE_PARAM > ... > #else /* ! YYPARSE_PARAM */ > #if defined (__STDC__) || defined (__cplusplus) > int > yyparse (void) > #else > int > yyparse () > ; > #endif > #endif > { > > So that semicolon is the source of the trouble. That's clearly a bison > bug, and in fact digging in Red Hat's SRPM shows that they are carrying > a patch for it: > > 2005-10-05 Paul Eggert <[EMAIL PROTECTED]> > > * data/m4sugar/m4sugar.m4 (_m4_map): New macro. > (m4_map, m4_map_sep): Use it. Handle the empty list correctly. > <snip patch> > > Presumably bison 2.2 includes this fix. But I guess the real question > is why the devil doesn't MSVC define __STDC__ ? Are they that far > removed from spec compliance?
In the bison 2.2 generated code, the #if check is #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) which looks like they figured out that they needed to check for MicroSoft C explicitly. I have no idea why they do not define __STDC__ however. > > regards, tom lane -- A person is just about as big as the things that make him angry. ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend