On 1/2/08, Naveen Verma <[EMAIL PROTECTED]> wrote: > Hi, > > I am sorry but somehow I got confused, I could not understand, does it make > any difference in compilation if we include other headers(like windows.h > etc) in a header file(e.g. foo.h) or in its source file(e.g. foo.c ) or in > both, because in my understanding headers usually have #ifdef in it so it > doesn't matter whether we include once or twice, it will be included only > once at compile time, and at least we need to include once somewhere either > in source or header. > > -Br > Naveen
Yes, what you say is correct, but the point of forward-declaration is somewhat different. The point is not to prevent headers from being included multiple times, but to prevent them from being included at all if they're not absolutely necessary. For example, say you have the following setup: A.h A.cpp B.h includes A.h B.cpp C.h includes B.h C.cpp This is a common (and valid) setup. In this case, if you change A.h, then B.cpp and C.cpp will need to be re-compiled (because they both include B.h which then includes A.h). But if B.h doesn't explicitly need the full definition of A, then you could change it to have the following setup: A.h A.cpp B.h forward-declares A B.cpp includes A.h C.h includes B.h C.cpp Now, when you change A.h, you only need to re-compile B.cpp and not C.cpp (since C.h includes B.h which only forward-declares A, and doesn't include the full A.h header). In addition, compiling C.cpp should be a little bit faster, because the compiler doesn't need to parse and compile all of A.h (and any headers that A.h includes). For a simple example, the difference is not significant, but for complex projects, it can make a significant difference in compilation depedencies and compilation times. -- jonner _______________________________________________ gtkmm-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gtkmm-list
