<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, May 14, 2013 at 11:29 AM, Andrey Utkin <span dir="ltr"><<a href="mailto:andrey.krieger.utkin@gmail.com" target="_blank">andrey.krieger.utkin@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">2013/5/14 Jean-Paul Saman <<a href="mailto:jpsaman@videolan.org">jpsaman@videolan.org</a>>:<br>

<div class="im">> Andrey,<br>
><br>
> On Sat, May 11, 2013 at 10:54 PM, Andrey Utkin<br>
> <<a href="mailto:andrey.krieger.utkin@gmail.com">andrey.krieger.utkin@gmail.com</a>> wrote:<br>
>><br>
>> I consider forcing compilation fail in case of multiple inclusion not<br>
>> correct.<br>
>> You can see in other projects include guards without "else" block,<br>
>> which result in silently compiling and working correctly.<br>
>> To further justify my position, i'll give an example.<br>
>> We have two classes - A and B, both of which utilize some dvbpsi<br>
>> objects, let's say dvbpsi_t, in their data members or function<br>
>> signatures. Thus they both have to include dvbpsi.h in their .h files.<br>
>> Then we have class C, which includes A and B as data members, so it<br>
>> has to include A.h and B.h in its .h. Voila, multiple inclusion, and<br>
>> libdvbpsi forces compilation fail.<br>
><br>
><br>
> You should not include the dvbpsi.h header files inside the .h file for this<br>
> situation. Include it only in the<br>
> .c files is the right solutions in your example.<br>
<br>
</div>Could you please explain what is the problem/risk of applying the<br>
change i proposed and using libdvbpsi the way i described? Currently I<br>
see none.<br></blockquote><div><br></div><div>In case of multiple inclusion of a header file is usually a sign that the design is flawed.<br>Your design probably exposes more internal details than it needs too.<br><br>It could easily lead to circular dependencies. It is cleaner to have header files as much<br>
as possible declared inside the *.c file.<br><br></div><div>This is my 2cts on the subject.<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

And with workaround you gave, i see the problem of having type<br>
dvbpsi_t undefined in headers. As i explained, i need this type as<br>
classes datamembers.<br></blockquote><div><br></div><div>You could do this:<br><br>file a.c<br><br></div><div>#include <dvbpsi.h><br></div><div>#include "a.h"<br><br></div><div>/* .. other stuff ...  */<br>
</div><div><br><div>Then file b.c<br><br></div><div>#include <dvbpsi.h><br>#include "b.h"<br><br></div><div>/* .. other stuff ... */<br></div><div><br></div><div>And finally: file "c.c"<br></div>
<br></div><div>#include <dvbpsi.h><br></div><div>#include "a.h"<br></div><div>#include "b.h"<br></div><div>#include "c.h"<br><br></div><div>/* other stuff */<br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

<br>
--<br>
Andrey Utkin<br>
</blockquote></div><br></div><div class="gmail_extra">Kind regards,<br><br>Jean-Paul Saman.<br></div></div>