Code Comments

Programming Forum and web based access to our favorite programming groups.
For Programmers: Free Programming Magazines | New: Database administration forum
Registration is free! Edit your profileCalendarFind other membersFrequently Asked QuestionsSearch -> 
Post New Thread











Thread
Author

best way to manage the headers..
In my project it is getting really messy to take care of all the
headers..for eg. right now I have following modules in my project -

vector.c
vector.h
test.c
reader.h
reader.c

vector.h

#ifndef VECTOR_H
#define VECTOR_H

#include <math.h>
....
.....

vector.c

#include "vector.h"
.......................

reader.h

#ifndef READER_H
#define READER_H

#include <stdio.h>
#include <stdlib.h>
.........................
..........................

And then, I have test.c which needs reader.h, vector.h. But there can
be instances where I may need to include stdio.h and stdlib.h but not
other contents of reader.h.  also, it is getting extremely confusing
to manage all the files. So is it a good idea to have a single all.h
file ? My code must be around 7000 lines.

Report this thread to moderator Post Follow-up to this message
Old Post
broli
03-28-08 11:59 PM


Re: best way to manage the headers..
On Mar 28, 9:23=A0am, broli <Brol...@gmail.com> wrote:
> So is it a good idea to have a single all.h file ?

No, because by multiplexing through a single header, you fold together
the dependency graph, so that then every .c file depends on every .h
file.

Now any time you touch any header, you have to recompile the entire
program.

If you have an "all.h" header, you might as well do away with a
dependency based build system and (for example on Unix) build your
program like this, every time something changes:

cc -o program *.c

Another issue is that recompiling each of the .c files is a bit slower
now because they are including a lot more extraneous material by way
of this all.h.

If every .c file includes every header, than the compilation time for
the program grows quadratically with its size! The more headers there
are, the more material is included into each .c file.

A third issue is that if you ever want to rip code out of this
program, you run into the problem that the code simply includes
"all.h". But you don't want to drag "all.h" along with that small
piece of code. So you have to figure out exactly what it depends on
through "all.h", and take only those headers, and of course edit the
code to include just those headers.

So in other words, this boneheaded practice interferes with some forms
of code reuse.

> My code must be around 7000 lines.

That's nothing. For such a small program, it doesn't matter how it's
managed. However, if it ever grows into a alrger program, or you want
to take pieces out of it and use it elsewhere,

There are programs in which just one source file is 7000 lines long.

Report this thread to moderator Post Follow-up to this message
Old Post
Kaz Kylheku
03-28-08 11:59 PM


Re: best way to manage the headers..
broli wrote:
> In my project it is getting really messy to take care of all the
> headers..for eg. right now I have following modules in my project -
>
> vector.c
> vector.h
> test.c
> reader.h
> reader.c
>
> vector.h
>
> #ifndef VECTOR_H
> #define VECTOR_H
>
> #include <math.h>
> ....
> .....
>
> vector.c
>
> #include "vector.h"
> .......................
>
> reader.h
>
> #ifndef READER_H
> #define READER_H
>
> #include <stdio.h>
> #include <stdlib.h>
> .........................
> ..........................
>
> And then, I have test.c which needs reader.h, vector.h. But there can
> be instances where I may need to include stdio.h and stdlib.h but not
> other contents of reader.h.

There are several approaches to handle this.  What you have is a good
start, assuming that vector.h requires math.h and reader.h requires stdio.h
and stdlib.h (are you using size_t as a parameter type?).

If a module uses stdio.h, simply include it, even though it is also
included from reader.h.

also, it is getting extremely confusing
> to manage all the files. So is it a good idea to have a single all.h
> file ? My code must be around 7000 lines.

I usually attempt to make code as modular as possible, so don't use an all.h
.


--
Thad

Report this thread to moderator Post Follow-up to this message
Old Post
Thad Smith
03-29-08 03:00 AM


Re: best way to manage the headers..
Thad Smith said :
> There are several approaches to handle this.  What you have is a good
> start, assuming that vector.h requires math.h and reader.h requires stdio.
h
> and stdlib.h (are you using size_t as a parameter type?).
>
> If a module uses stdio.h, simply include it, even though it is also
> included from reader.h.
>

Wouldn't this approach cause redundancy ?



Report this thread to moderator Post Follow-up to this message
Old Post
broli
03-29-08 08:59 AM


Re: best way to manage the headers..
broli wrote:

>  Thad Smith said : 
>
> Wouldn't this approach cause redundancy ?

No. Header guards will prevent multiple inclusions into a single
translation unit.

Almost all headers have something like:

#ifndef HEADER_H
#define HEADER_H 1
/* contents of header */
#endif

or some functional equivalent.

The first time this header is included in a translation unit, the
preprocessor would not have defined the symbol HEADER_H yet, so it will
define it now and include the headers contents. The next time you
include a header the symbol would be already defined so everthing
between #ifndef HEADER_H and the corresponding #endif is skipped.


Report this thread to moderator Post Follow-up to this message
Old Post
santosh
03-29-08 08:59 AM


Re: best way to manage the headers..
well in my program, i do have a situation where i need to make
everything(almost) visible to everyone.
which is why i was considering the all.h approach. My project is based
on ray tracing. You have module like -

1. Ray ( Basic Data structure , initialization of rays, creation of
reflected rays, shadow rays etc)

2. Geometry File Reader ( Reads the geometry into my data structures)

3. Octree ( For spatial subdivision of the 3D object)

4. Vector module ( Vector data structure, basic vector functions.)

5. Ray Tracing Module (To keep track of rays)

6. Ray - Triangle Intersection Module


As you can see they are all more or less dependent on each other. One
approach that I saw soemwhere was to define a main.h file.

There were many files in the project -

a.h
a.c

b.h
b.c

c.h
c.c

d.h
d.c

application.h

main.c
main.h



In this, application.h was containing some common #defines, prototypes
of functions in main.c and it included standard headers like stdio,
math, string etc.

main.h was like this -

#ifndef a_h
#include "a.h"
#endif

#ifndef b_h
#include "b.h"
#endif


#ifndef c_h
#include "c.h"
#endif


#ifndef d_h
#include "d.h"
#endif

#ifndef application_h
#include "application.h"
#endif

Then this main.h was included in every .c and .h file...


I thought this was also a neat approach

What do you think ?

Report this thread to moderator Post Follow-up to this message
Old Post
broli
04-03-08 03:07 AM


Re: best way to manage the headers..
broli said:

> well in my program, i do have a situation where i need to make
> everything(almost) visible to everyone.

You should have thought of that before trolling the group. You'll be in
quite a few killfiles by now.

--
Richard Heathfield <http://www.cpax.org.uk>
Email: -http://www. +rjh@
Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
"Usenet is a strange place" - dmr 29 July 1999

Report this thread to moderator Post Follow-up to this message
Old Post
Richard Heathfield
04-03-08 03:07 AM


Re: best way to manage the headers..
Richard Heathfield wrote:
> broli said:
> 
>
> You should have thought of that before trolling the group. You'll be
> in quite a few killfiles by now.
indeed...



Report this thread to moderator Post Follow-up to this message
Old Post
Joachim Schmitz
04-03-08 03:07 AM


Re: best way to manage the headers..
On Apr 2, 7:40 pm, Richard Heathfield <r...@see.sig.invalid> wrote:
> broli said:
> 
>
> You should have thought of that before trolling the group. You'll be in
> quite a few killfiles by now.
>
> --
> Richard Heathfield <http://www.cpax.org.uk>
> Email: -http://www. +rjh@
> Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
> "Usenet is a strange place" - dmr 29 July 1999


thats great!

Report this thread to moderator Post Follow-up to this message
Old Post
broli
04-03-08 03:07 AM


Re: best way to manage the headers..
Richard Heathfield wrote:
> broli said:
> 
>
> You should have thought of that before trolling the group. You'll be in
> quite a few killfiles by now.

He entered mine this morning, so I won't be able to
offer him any help until at least May 1.  (First offenders
get a one-month sentence; repeat offenders go into the
Forever File.)

--
Eric.Sosman@sun.com

Report this thread to moderator Post Follow-up to this message
Old Post
Eric Sosman
04-03-08 03:07 AM


Sponsored Links




Last Thread Next Thread Next
Pages (2): [1] 2 »
Search this forum -> 
Post New Thread

C archive

Show a Printable Version Send to friend Email This Page to Someone! subscribe to this thread Receive updates to this thread
Computer Consultants
Programming Jobs
Visual Basic Controls
SQL Server Programming
Webservices
Java Security
Visual Studio
C# Programming
Visual J++
Software engineering
Open source Software
Perl Programming
PHP Programming
ASP Programming
ASP .NET Programming
Visual Basic Programming
Windows Scripting Host
Java Programming
Java Help
Java Beans
VBScript
Cobol
MAC Applications
Unix Programming
Forum Jump:
All times are GMT. The time now is 08:38 AM.

 
Free MCSE Braindumps | Real Estate Topics

Programming forum archive

Copyrights CodeComments.com 2004 - 2006

Powered by vBulletin Copyright 2000-2006 Jelsoft Enterprises Limited.