473,387 Members | 2,436 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

struct declaration query

I'm trying to figure out some code that uses structures, structures, and
more structures...

It's a bit of rat's nest, and I'm having some trouble sorting it all out.

The authors use a lot of the following 'declarations' in the various .h
files:

struct document;
struct document_view;
struct link;
struct session;
struct term_event;
struct terminal;
struct uri;
struct conv_table;

These aren't being used as a part of another structure; they're just
standalone declarations? statements?

I can't quite picture what these do.

What exactly would be the effect of those empty declarations?

Maybe that will help me trace the code....

--Yan
Apr 26 '07 #1
6 1761
In article <13*************@corp.supernews.com>
CptDondo <ya*@NsOeSiPnAeMr.comwrites:
>I'm trying to figure out some code that uses structures, structures, and
more structures...

It's a bit of rat's nest, and I'm having some trouble sorting it all out.

The authors use a lot of the following 'declarations' in the various .h
files:

struct document;
struct document_view;
struct link;
struct session;
struct term_event;
struct terminal;
struct uri;
struct conv_table;

These aren't being used as a part of another structure; they're just
standalone declarations? statements?
They are incomplete types. Usually, the reason for putting those
in is that something in the file declares a pointer to one of them:

struct foo;
void useFoo(foo *fooPtr);

The compiler doesn't need the detail of the struct to deal with a
pointer. Any file that uses the fields inside these structs will
need a complete type defined.

Some libraries use this for encapsulation -- they give you a pointer
that you send back in every call, but no one outside the library
looks inside the struct.
>I can't quite picture what these do.

What exactly would be the effect of those empty declarations?
They tell you, "These types exist and you don't need to know what
is inside them."

--
Drew Lawson | "But the senator, while insisting he was not
dr**@furrfu.com | intoxicated, could not explain his nudity."
Apr 26 '07 #2
CptDondo wrote:
I'm trying to figure out some code that uses structures, structures, and
more structures...

It's a bit of rat's nest, and I'm having some trouble sorting it all out.

The authors use a lot of the following 'declarations' in the various .h
files:

struct document;
struct document_view;
struct link;
struct session;
struct term_event;
struct terminal;
struct uri;
struct conv_table;

These aren't being used as a part of another structure; they're just
standalone declarations? statements?
They are forward declarations, they let the compiler know that these
types exit. You will probably see use of pointers to these as function
parameters or structure members.

--
Ian Collins.
Apr 26 '07 #3
Drew Lawson wrote:
>I can't quite picture what these do.

What exactly would be the effect of those empty declarations?

They tell you, "These types exist and you don't need to know what
is inside them."
OK, thanks. That explains a lot.

The code uses a lot of structures with pointers to other structures, and
macros that define yet more pointers....

The parts I've figured out make sense... But it sure is complicated. :-)

--Yan
Apr 26 '07 #4
On Apr 27, 7:38 am, d...@furrfu.com (Drew Lawson) wrote:
CptDondo <y...@NsOeSiPnAeMr.comwrites:
The authors use a lot of the following 'declarations' in the various .h
files:
struct document;
struct document_view;

They are incomplete types. Usually, the reason for putting those
in is that something in the file declares a pointer to one of them:

struct foo;
void useFoo(foo *fooPtr);
Should read:
void useFoo( struct foo *fooPtr );

If you write this code without the forward declaration, then
'struct foo' gets declared with "prototype scope", meaning
that any subsequent file-scope "struct foo" is actually a
different struct. (Don't ask me why).

Apr 26 '07 #5
In article <11**********************@u32g2000prd.googlegroups .com>
Old Wolf <ol*****@inspire.net.nzwrites:
>On Apr 27, 7:38 am, d...@furrfu.com (Drew Lawson) wrote:
> CptDondo <y...@NsOeSiPnAeMr.comwrites:
>The authors use a lot of the following 'declarations' in the various .h
files:
>struct document;
struct document_view;

They are incomplete types. Usually, the reason for putting those
in is that something in the file declares a pointer to one of them:

struct foo;
void useFoo(foo *fooPtr);

Should read:
void useFoo( struct foo *fooPtr );
Sorry about that.
I'm lazy and hate typing 'struct' all the time, so I have been doing
typedefs for all my structs forever. That seems to have made my
posting a bit sloppy.
>If you write this code without the forward declaration, then
'struct foo' gets declared with "prototype scope", meaning
that any subsequent file-scope "struct foo" is actually a
different struct. (Don't ask me why).
That's a new one. I'm not sure I should try to understand that on
a Friday afternoon.
--
Drew Lawson For it's not the fall, but landing,
dr**@furrfu.com That will alter your social standing
Apr 27 '07 #6
Drew Lawson wrote:
>
In article <11**********************@u32g2000prd.googlegroups .com>
Old Wolf <ol*****@inspire.net.nzwrites:
[...]
If you write this code without the forward declaration, then
'struct foo' gets declared with "prototype scope", meaning
that any subsequent file-scope "struct foo" is actually a
different struct. (Don't ask me why).

That's a new one. I'm not sure I should try to understand that on
a Friday afternoon.
In that case, try wrapping your head around this error message:

usenet.c(14) : warning C4133: 'function' : incompatible types -
from 'struct foobar *' to 'struct foobar *'

Here's the source:

==========
int foo(struct foobar *ptfoo)
{
return 42;
}

struct foobar
{
int a;
int b;
};

int bar(struct foobar *ptbar)
{
return foo(ptbar);
}
==========

When compiling in ANSI mode, the "struct foobar *" type of the
parameter to foo() is not the same "struct foobar *" type of the
parameter to bar().

--
+-------------------------+--------------------+-----------------------+
| Kenneth J. Brody | www.hvcomputer.com | #include |
| kenbrody/at\spamcop.net | www.fptech.com | <std_disclaimer.h|
+-------------------------+--------------------+-----------------------+
Don't e-mail me at: <mailto:Th*************@gmail.com>

Apr 27 '07 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

20
by: Elliot Marks | last post by:
If a struct or its members are passed to a function, must it be declared globally? #include <stdio.h> struct mystruct{ int a; int b; }; int structfunc(struct mystruct foo);
5
by: PCHOME | last post by:
Hello! I am working on dividing a single C file into several files. Now I encounter a problem about the global variables and can not find a way to solve it. All global variables and codes used...
19
by: Russell Shaw | last post by:
Hi, I have two structs in a header file, and they reference each other, causing a compile error. Is there a standard way to deal with this? typedef struct { ... RtAction *actions; }...
6
by: S.Tobias | last post by:
I'm trying to understand how structure type completion works. # A structure or union type of unknown # content (as described in 6.7.2.3) is an incomplete type. It # is ...
14
by: Lane Straatman | last post by:
I would like to write a 'struct'. I have a library that is all but completely inappropriate for this task. So I'm looking for C code that fills in the gaps between: #undef...
28
by: Bill | last post by:
Hello All, I am trying to pass a struct to a function. How would that best be accomplished? Thanks, Bill
2
by: Laurent Deniau | last post by:
I would like to know why the following small program does not compile (checked with gcc 4.1.2) and if the compiler behavior is correct: struct A; typedef void (T)(struct A*); void f(void) {...
2
by: beet | last post by:
Hi all, I tried to declare a c++ struct like following in a header file; I want to include this header file in other files to create and access this struct. ------ 1 #ifndef _SEARCHDATA_H_...
10
by: Raman | last post by:
Hi All, Is it valid: struct test{ }; I mean, Can we have a struct containing no members? Is this a an
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.