[Openmcl-devel] Accessing foreign #define'd constants

rm at fabula.de rm at fabula.de
Wed Dec 22 20:43:46 UTC 2004

On Wed, Dec 22, 2004 at 03:32:31PM -0500, David Steuber wrote:
> On Dec 22, 2004, at 12:46 PM, Denis Bueno wrote:
> >The problem was that what I had assumed was a C constant was actually 
> >a #define'd C macro ... so of course I couldn't call it.
> Right.  #define is simply a text substitution.  I don't know if I am 
> comfortable calling them C macros ;-)

Well, there are people out there calling M4 macros :-)

> >I know it's not the responsibility of the openmcl documentation to 
> >teach people C, but, maybe a little note (in sec. 9.8?) about the 
> >preferred way to have openmcl call C macros (like by making "glue" via 
> >a my_macro_call.c file with a my_macro_call() function and calling 
> >that function from openmcl, 

That doesn't really work. The interface files (those with the .ffi suffix)
are generated by a patched version of the gcc compiler after (!) the 
headers have been preprocessed with the cpp preprocessor - gcc doesn't
even "see" the #defines. Yes, it's nasty - i got bitten by it too. Some
smarty just changed the gtk signal connect function into a macro ...

> or something) would be helpful to anyone 
> >who runs into this problem in the future. I'm certainly willing to 
> >write it, if that is acceptable.

> The Carbon headers make a lot of use of enums for C constants.  These 
> have the advantage of being real constants that are also available via 
> #$.  What I hate though is the frequent practice of enums that are 
> assigned like this:
> foo = 'ctrl',
> Joy!  At least #$ works.  When the same thing is a #define...  Well 
> then you have to figure out what the UInt32 that is.

Hehe, that's harmless compared to those who will put a 

 do { ... lot's of code } while (0)

into a #define expansion ... cool trick, _almost_ an unnamed block
but a pain for FFI.

> Bottom line though is when you are using FFI to call into C (and having 
> C call back!), it really does help to know some C.
> Now am I the only one who keeps typing $_ instead of #_?  I blame Perl 
> for that.

Funny, happens to me all the time.

 Cheers Ralf Mattes
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel

More information about the Openmcl-devel mailing list