19

I've defined an opaque structure and related APIs like this:

typedef struct foo foo;
foo *create_foo(...);
delete_foo(foo *f);

I am not able to define the structure in my c file. Gives redefinition error.

typedef struct foo {
   int implementation;
}foo;

I am able to use foo in c file without typedef but I want the typedef (i.e. use it directly as foo*). Is there a way?

Manish
  • 1,985
  • 2
  • 20
  • 29

1 Answers1

27

You already have the typedef in your header, so include that and define struct foo in the implementation without the typedef.

foo.h:

typedef struct foo foo;
foo *create_foo(...);
delete_foo(foo *f);

foo.c:

#include <foo.h>

struct foo { int implementation; };
/* etc. */
Fred Foo
  • 355,277
  • 75
  • 744
  • 836
  • 1
    True. I can just use it in c file without typedefing it again. Dumb of me to ask such question. Thanks for making me realize that. :) – Manish Mar 14 '11 at 13:51