[GCC 4.0 PATCH] devfs_vnops.c
Stefan Farfeleder
stefan at fafoe.narf.at
Thu May 26 00:28:11 PDT 2005
On Wed, May 25, 2005 at 10:01:43PM -0400, Craig Rodrigues wrote:
> Hi,
>
> When I tried to compile src/sys/fs/devfs/devs_vnops.c
> with GCC 4.0, I got the following compilation errors:
>
> /usr/src/sys/fs/devfs/devfs_vnops.c:1389: error: static declaration of 'devfs_vnodeops' follows non-static declaration
> /usr/src/sys/fs/devfs/devfs_vnops.c:114: error: previous declaration of 'devfs_vnodeops' was here
> /usr/src/sys/fs/devfs/devfs_vnops.c:1411: error: static declaration of 'devfs_specops' follows non-static declaration
> /usr/src/sys/fs/devfs/devfs_vnops.c:115: error: previous declaration of 'devfs_specops' was here
>
> Apparently, it is not valid C to define something as extern
> and then later on static in the same file, like:
>
> extern struct foo bar;
> static struct foo bar = { .... };
Yes.
> What do people think of the following patch to fix it?
>
> http://people.freebsd.org/~rodrigc/devfs_vnops.c.diff.txt
Contrary to what Poul-Henning said, in this case it's perfectly legal to
use:
static struct foo bar;
[...]
static struct foo bar = { ... };
The first declaration is a tentative definition (it defines the object
only if no `real' definition with an initialiser is found), the second
declaration defines the object bar. There is only a problem if bar had
array type and bar's initialiser was used to define the array size,
because then the tentative definition
static struct foo bar[];
would be illegal since bar has an incomplete type (6.9.2#3).
Stefan
More information about the freebsd-current
mailing list