[ovs-dev] [ext-244 3/4] Remove assumption that there are 64 or fewer fields.

Ben Pfaff blp at nicira.com
Sat Jul 26 17:58:15 UTC 2014


On Sat, Jul 26, 2014 at 10:41:34AM -0700, Jarno Rajahalme wrote:
> > On Jul 26, 2014, at 10:37 AM, Ben Pfaff <blp at nicira.com> wrote:
> > On Sat, Jul 26, 2014 at 08:47:56AM -0700, Jarno Rajahalme wrote:
> >>> -    enum ofputil_protocol usable_protocols_bitwise;
> >>> +    uint32_t usable_protocols_bitwise;
> >> 
> >> These seem unrelated changes?
> > 
> > This is actually a sticky point.  Before this commit, meta-flow.h
> > includes ofp-util.h, to get "enum ofputil_protocol" for these two
> > members.  After this commit, ofp-util.h includes meta-flow.h, to get
> > struct mf_bitmap.  The circular dependency causes a problem.  The best
> > solution I came up with was to change the "enum ofputil_protocol"
> > members to uint32_t.  It's not a great solution.  Do you have a good
> > idea?
> 
> Can the enum be forward declared here instead?

Standard C doesn't have incomplete enums.  GNU C has them as an
extension, but they are not useful.  From the GCC manual:

    5.42 Incomplete `enum' Types
    ============================

    You can define an `enum' tag without specifying its possible values.
    This results in an incomplete type, much like what you get if you write
    `struct foo' without describing the elements.  A later declaration
    which does specify the possible values completes the type.

     You can't allocate variables or storage using the type while it is
    incomplete.  However, you can work with pointers to that type.

     This extension may not be very useful, but it makes the handling of
    `enum' more consistent with the way `struct' and `union' are handled.

     This extension is not supported by GNU C++.



More information about the dev mailing list