On Sun, Sep 16, 2012 at 11:52 AM, Tom Lane <t...@sss.pgh.pa.us> wrote:
> Gurjeet Singh <singh.gurj...@gmail.com> writes: > > I noticed that xlog.h uses PGDLLIMPORT, but it does not include c.h > > directly or indirectly. > > In general, all include files in Postgres assume that you've included > postgres.h or postgres_fe.h (as appropriate) first; Thankfully, this IDE provides for me to specify preprocessor directives that are processed before parsing any source files, so it was easy for me to #include "c.h" in every file. So, that solved the problem for me, but other IDEs may not be so flexible. I understand that I am supposed to include postgres.h in backend files, and postgres_fe.h in frontend files, like those of psql, pg_dump, ecpg, etc., but I didn't bother with that for now. If I proceed with this IDE, then I think it'll make sense to have a project per client program, so that I can include postgres_fe.h for those projects, and postgres.h for the main backend project. and practically > all of them have far more dependencies on that than you mention here. > If we were to decorate them with explicit inclusions such as you propose, > we would accomplish little except to bloat the sources and slow down > compilation. > True, it would affect the compilation times, but I think if one is using ccache, then they would be sheilded from this on second and subsequent runs. > > The general rule about that is "thou shalt have no other gods before > c.h" --- that is, it is *necessary* that c.h be included before anything > else, in *every* Postgres file. Otherwise you can run into > platform-specific problems. An example I remember is individual files > having different ideas of whether 64-bit or 32-bit filesystem APIs are > in use, as a consequence of <stdio.h> being read before pg_config_os.h > has defined symbols controlling that. Needless to say, this doesn't > work well at runtime. You can find actual examples of that sort of > thing in the archives from years ago, before we began to enforce the > rule rigidly. > I'm glad that we have this rule in place. Best regards, -- Gurjeet Singh http://gurjeet.singh.im/