comp.lang.ada
 help / color / mirror / Atom feed
From: "David Crocker" <dcrocker@imsltd.com>
Subject: Re: 'withing' problem [code generation]
Date: Tue, 20 Nov 2001 16:34:04 -0000
Date: 2001-11-20T16:34:04+00:00	[thread overview]
Message-ID: <3bfa84ca$0$8514$ed9e5944@reading.news.pipex.net> (raw)
In-Reply-To: 3BFA6BDC.26E7557E@Raytheon.com

It's not hard to come up with a system that makes the order of C++ include
files unimportant. Our product currently generates C++ (we would like to
generate Ada, which is why I started this thread) so we needed just such a
scheme.

Our solution uses 2 header files for each main file. The phase 1 header file
just contains forward declarations for all the classes declared, then the
phase 2 header file contains the class declarations proper. Each main file
first includes all relevant phase 1 header files (in alphabetical order) and
then all relevant phase 2 header files (also in alphabetical order). The
phase 2 header files include other phase 2 header files only where there is
a strong dependency (i.e. class inheritance). Strong dependencies are not
circular. Of course, we also use the usual header guards to ensure each file
only gets included once.

The nicest solution is the one used by Java (and by our own product) - no
restriction at all on forward referencing classes/types, or on packages
referring to each other (except for absurd cases like 2 classes inheriting
from each other). This is the way all programming languages should go, IMO.
Forward-declarations should be considered obsolete - they only exist to make
life easier for the compiler writer, and compiler technology has come a long
way now.
--
David Crocker, Escher Technologies Ltd. www.eschertech.com


"Mark Johnson" <Mark_H_Johnson@Raytheon.com> wrote in message
news:3BFA6BDC.26E7557E@Raytheon.com...

(snip)

> I thought about this a little last night and you have the circular
dependency problem
> in C if you are not careful. You get an infinite loop in the C
preprocessor if
> doctor.h includes patient.h and vice versa. Almost everybody codes their
header files
> to have some #ifundef that encloses the body of the header file. That way,
each
> header is expanded only once. Even with that, you could have a subtle bug
due to the
> different order of expansion - doctor before patient or patient before
doctor. Icky,
> nasty problems to find and fix..






  reply	other threads:[~2001-11-20 16:34 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-11-02 10:24 'withing' problem David Crocker
2001-11-02 10:58 ` David C. Hoos, Sr.
2001-11-02 21:32   ` Florian Weimer
2001-11-02 14:49 ` Robert Dewar
2001-11-05  9:49   ` David Crocker
2001-11-02 15:06 ` Wes Groleau
2001-11-02 15:21 ` Ted Dennison
2001-11-02 17:19   ` Ed Falis
2001-11-02 18:17     ` Preben Randhol
2001-11-02 19:15       ` Ed Falis
2001-11-03  2:52       ` DuckE
2001-11-03  9:50         ` Preben Randhol
2001-11-03  8:25   ` Simon Wright
2001-11-03 17:27     ` Richard Riehle
2001-11-04 10:23       ` Simon Wright
2001-11-08 10:58         ` Preben Randhol
2001-11-08 15:24           ` Peter Hend�n
2001-11-10 17:57           ` Simon Wright
2001-11-05  9:48       ` David Crocker
2001-11-05 20:36         ` Ted Dennison
2001-11-06 15:56           ` David Crocker
2001-11-07 15:06             ` Ted Dennison
2001-11-07 16:49               ` Darren New
2001-11-09 20:28         ` Matthew Heaney
2001-11-10 13:55           ` Preben Randhol
2001-11-12 15:10             ` Matthew Heaney
2001-11-10 18:12           ` Simon Wright
2001-11-12 15:13             ` Matthew Heaney
2001-11-13  7:01               ` Simon Wright
2001-11-14 16:10                 ` Matthew Heaney
2001-11-15 20:21                   ` Simon Wright
2001-11-15 21:07                     ` Matthew Heaney
2001-11-16 14:37                     ` Stephen Leake
2001-11-17 22:29                     ` Richard Riehle
2001-11-18 14:53                       ` Simon Wright
2001-11-19  5:51                         ` Simon Wright
2001-11-19 15:23                         ` Matthew Heaney
2001-11-19 17:19                           ` 'withing' problem [code generation] Mark Johnson
2001-11-19 20:58                             ` Stephen Leake
2001-11-19 21:20                               ` Matthew Heaney
2001-11-21  6:20                                 ` Simon Wright
2001-11-20  0:50                               ` Mark Biggar
2001-11-21  6:21                                 ` Simon Wright
2001-11-20 14:42                               ` Mark Johnson
2001-11-20 16:34                                 ` David Crocker [this message]
2001-11-20 18:34                                   ` Richard Pinkall-Pollei
2001-11-20 18:43                                   ` Matthew Heaney
2001-11-20 20:37                                     ` Mark Lundquist
2001-11-22 11:49                                     ` David Crocker
2001-11-20 20:35                                   ` Mark Lundquist
2001-11-22 11:42                                     ` David Crocker
2001-11-19 19:30                           ` 'withing' problem Preben Randhol
2001-11-03  8:26 ` Simon Wright
2001-11-03  8:38 ` Simon Wright
2001-11-05  9:54   ` David Crocker
2001-11-05 18:04     ` tmoran
2001-11-06 15:29       ` David Crocker
2001-11-07  0:38         ` tmoran
2001-11-07 10:11           ` David Crocker
2001-11-07 18:59             ` tmoran
2001-11-08 11:38               ` David Crocker
2001-11-10 18:03                 ` Simon Wright
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox