Hi, I think you are referring to C89 standard. Newer version of GCC might have switched to newer version of the C standard. So, try to compile your code with -std=c89? -- Best regards, Tadeus On Fri, Feb 16, 2018 at 3:41 PM, Andrew Makhorin <mao@xxxxxxx> wrote: > Hello, > > On compiling the following code with gcc (Debian 4.7.2-5) 4.7.2: > > int foo(int x, int y) > { > extern int bar(); > return bar(x, y); > } > > static int bar(int x, int y) > { > return x + y; > } > > I get the following error: > > mao@corvax:~/Desktop$ gcc -c test.c > test.c:7:15: error: static declaration of 'bar' follows non-static > declaration > test.c:3:21: note: previous declaration of 'bar' was here > > However, the Standard says [6.1.2.2 Linkages of identifiers]: > > If the declaration of an identifier for an object or a function > contains the storage-class specifier extern, the identifier has the > same linkage as any visible declaration of the identifier with file > scope. > > There is no other way to declare 'bar' as static in block scope, > because it is a function, so this error confuses me. Could anyone > explain this? Should it be a warning rather than error? I'd like to note > that my code is compiled successfully with older versions of gcc and > with many other C compilers. > > > Thanks, > > Andrew Makhorin > >