Re: #include - Mailing list pgsql-general

From Elliot Chance
Subject Re: #include
Date
Msg-id C42174AA-A881-484C-BE6F-F92F7B20C054@gmail.com
Whole thread Raw
In response to Re: #include  (Craig Ringer <craig@postnewspapers.com.au>)
List pgsql-general
Heres an interesting hack I just thought of that works:

extern "C" {
    #include <postgres.h>
    #include <fmgr.h>
    #define using _using
    #define typeid _typeid
    #define typename _typename
    #include <funcapi.h>
    #undef using
    #undef typeid
    #undef typename

    #ifdef PG_MODULE_MAGIC
    PG_MODULE_MAGIC;
    #endif
};


Now there is no collision with the C++ keywords.


On 26/12/2010, at 5:14 PM, Craig Ringer wrote:

> On 12/26/2010 02:14 PM, Elliot Chance wrote:
>
>> In file included from /usr/include/pgsql/server/access/heapam.h:21,
>>                  from /usr/include/pgsql/server/nodes/execnodes.h:18,
>>                  from /usr/include/pgsql/server/executor/execdesc.h:18,
>>                  from /usr/include/pgsql/server/executor/executor.h:17,
>>                  from /usr/include/pgsql/server/funcapi.h:21,
>>                  from xapian.cpp:4:
>> /usr/include/pgsql/server/nodes/primnodes.h:1155: error: expected unqualified-id before ‘using’
>
> You've neglected to mention which version of Pg you're compiling against, so that line number means nothing. What's
theoffending line of code and the surrounding few lines in primnodes.h? 
>
> In any case, I think it's very likely the issue is a C/C++ incompatibility in the Pg headers. It fails for me in a
differentplace using Pg 9.1git and g++ 4.5, complaining about the use of "private" as an identifier in fmgr.h, because
it'sa keyword in C++. 
>
> This is one of the many reasons you should keep any code that touches the postgres innards as pure C, and call into
yourC++ code via "extern C" functions. The Pg headers aren't really C++ safe. Neither is Pg's longjmp-based error
handling,which really won't mix well with exceptions or with stack-based objects that have dtors. 
>
> --
> Craig Ringer


pgsql-general by date:

Previous
From: Craig Ringer
Date:
Subject: Re: #include
Next
From: Elliot Chance
Date:
Subject: C functions with COMMIT/ROLLBACK?