Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C Programming (http://www.velocityreviews.com/forums/f42-c-programming.html)
-   -   struct declaration (silly question) (http://www.velocityreviews.com/forums/t595597-struct-declaration-silly-question.html)

Marcin Kasprzak 03-03-2008 01:12 AM

struct declaration (silly question)
 
Hello Guys,
Silly question - what is the most elegant way of compiling a code similar
to this one?

<code>
typedef struct a {
b_t *b;
} a_t;

typedef struct b {
a_t *a;
} b_t;

int main(void) {

return 0;
}
</code>

my solution is to simply change type "b_t" to "void" but I'm not sure
if that's the best way of dealing with this issue.

Thanks,

--
Marcin Kasprzak

Ben Pfaff 03-03-2008 01:38 AM

Re: struct declaration (silly question)
 
Marcin Kasprzak <no@email.address> writes:

> Silly question - what is the most elegant way of compiling a code similar
> to this one?
> [code for mutually referential structures]


Refer to the C FAQ.

1.14: I can't seem to define a linked list successfully. I tried

typedef struct {
char *item;
NODEPTR next;
} *NODEPTR;

but the compiler gave me error messages. Can't a structure in C
contain a pointer to itself?

A: Structures in C can certainly contain pointers to themselves;
the discussion and example in section 6.5 of K&R make this
clear. The problem with the NODEPTR example is that the typedef
has not been defined at the point where the "next" field is
declared. To fix this code, first give the structure a tag
("struct node"). Then, declare the "next" field as a simple
"struct node *", or disentangle the typedef declaration from the
structure definition, or both. One corrected version would be

struct node {
char *item;
struct node *next;
};

typedef struct node *NODEPTR;

and there are at least three other equivalently correct ways of
arranging it.

A similar problem, with a similar solution, can arise when
attempting to declare a pair of typedef'ed mutually referential
structures.

See also question 2.1.

References: K&R1 Sec. 6.5 p. 101; K&R2 Sec. 6.5 p. 139; ISO
Sec. 6.5.2, Sec. 6.5.2.3; H&S Sec. 5.6.1 pp. 132-3.
--
"I've been on the wagon now for more than a decade. Not a single goto
in all that time. I just don't need them any more. I don't even use
break or continue now, except on social occasions of course. And I
don't get carried away." --Richard Heathfield

Peter Nilsson 03-03-2008 01:38 AM

Re: struct declaration (silly question)
 
Marcin Kasprzak <n...@email.address> wrote:
> Hello Guys,
> Silly question...


The question isn't; that you asked it is. It's a FAQ...

http://c-faq.com/decl/mutrefstructs.html

--
Peter

William Pursell 03-03-2008 04:51 AM

Re: struct declaration (silly question)
 
On 3 Mar, 01:12, Marcin Kasprzak <n...@email.address> wrote:

> Silly question - what is the most elegant way of compiling a code similar
> to this one?
>
> <snip code>


Others have mentioned the FAQ which deals with the necessary
forward declaration, but as a point of style, I recommend:

struct b;
struct a {
struct b *b;
};

struct b {
struct a *a;
};

Note that your question is phrased poorly, since this has
nothing to do with compiling, but with writing syntactically
correct code that will compile. Also note that it is not
necessary to include main() in order to compile. main()
is only needed to link. (eg, 'gcc -c foo.c' will compile
foo.c and generate foo.o, and no main() is necessary.)

William Pursell 03-03-2008 04:54 AM

Re: struct declaration (silly question)
 
On 3 Mar, 04:51, William Pursell <bill.purs...@gmail.com> wrote:
> On 3 Mar, 01:12, Marcin Kasprzak <n...@email.address> wrote:
>
> > Silly question - what is the most elegant way of compiling a code similar
> > to this one?

>
> > <snip code>

>
> Others have mentioned the FAQ which deals with the necessary
> forward declaration, but as a point of style, I recommend:


Ergg...no forward declaration necessary, of course. I
was distracted by the typedef's and '_t's and mistook
the question for a different FAQ.

Marcin Kasprzak 03-03-2008 09:50 AM

Re: struct declaration (silly question)
 
Thanks guys for all your help,
now it works fine.

Once again thanks.

--
Marcin Kasprzak


All times are GMT. The time now is 01:07 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.