[fpc-pascal] Re: Weird compilation warnings

Guillermo Martínez Jiménez gmartinez at burdjia.com
Thu Mar 1 22:22:08 CET 2012


Oh, I see.  It has sense.  The "extra implicit parameter" part
confused me because I didn't use OOP in that project.

Thank you :)

2012/3/1  <fpc-pascal-request at lists.freepascal.org>:
> From: Sven Barth <pascaldragon at googlemail.com>
> Subject: Re: [fpc-pascal] Weird compilation warnings
>
> Am 29.02.2012 22:53, schrieb Guillermo Martínez Jiménez:
>> Hello,
>>
>> FPC is returning the "Warning: cdecl’ared functions have no high
>> parameter" but I have no idea why.  The documentation just says
>> "Functions declared with the cdecl modifier do not pass an extra
>> implicit parameter." but the affected functions don't have any "extra
>> implicit parameter".
>>
>> I'm using FPC 2.4.2 (the one that came with Lazarus).
>>
>> Here you have some sample code:
>> ___________________________________
>>
>> UNIT a...;
>> IMPLEMENTATION
>>
>>    {$MODE FPC}
>>    {$PACKRECORDS C}
>>    {$LONGSTRINGS ON}
>>
>> { Next declaration compiles Ok. }
>>    PROCEDURE al_draw_ustr (CONST font: ALLEGRO_FONTptr; color:
>> ALLEGRO_COLOR; x, y: SINGLE; flags: LONGINT; CONST ustr:
>> ALLEGRO_USTRptr); CDECL;
>>
>> { Next one raises the "WARNING" }
>>    FUNCTION al_grab_font_from_bitmap (bmp: ALLEGRO_BITMAPptr; n:
>> LONGINT; ranges: ARRAY OF LONGINT): ALLEGRO_FONTptr; CDECL;
>> ...
>
> You are passing an open array here. open arrays are realized internally
> by passing a pointer to the start of the array and an (implicit) high
> parameter which lets the compiler deduce the length of the array. This
> is not supported with cdecl or cppdecl. If you want a cdecl function to
> receive an array you should write something like this:
>
>     FUNCTION al_grab_font_from_bitmap (bmp: ALLEGRO_BITMAPptr; n:
>  LONGINT; ranges: PLONGINT; len: LONGINT): ALLEGRO_FONTptr; CDECL;
>
> Do you want to provide this functions from inside a DLL? If so you
> should use my above variant, because other languages don't understand
> Pascal's open arrays (because of the implicit high parameter). If you
> only use the function inside your own Pascal code I suggest you to not
> use cdecl functions if it's not really necessary.
>
> Regards,
> Sven



More information about the fpc-pascal mailing list