Initializing constant (translate from C)

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Initializing constant (translate from C)

Darius Blaszyk
Here's an interesting one. In C I have this code:

#define ID1 MAKE_ID('A', 'B')

Where MAKE_ID is a macro that depending on the endianness of the target will create either AB or BA.

How would I be able to translate this into Pascal? ID1 preferably would need to remain a constant. I tried using an inline function without success. If all fails I will need to define them all individually using an ifdef for different endian systems. But this would be my last resort.

TIA, Darius

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Initializing constant (translate from C)

dmitry boyarintsev
On Mon, Oct 16, 2017 at 3:36 PM, Darius Blaszyk <[hidden email]> wrote:
Here's an interesting one. In C I have this code:

#define ID1 MAKE_ID('A', 'B')

Where MAKE_ID is a macro that depending on the endianness of the target will create either AB or BA.

The only issue with the following approach
const
  ID  ={$IFDEF ENDIAN_LITTLE} 'AB' {$ELSE} 'BA' {$ENDIF};

is if MAKE_ID is used anywhere else, you'll have to repeat the code.

thanks,
Dmitry

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Initializing constant (translate from C)

Free Pascal - General mailing list
In reply to this post by Darius Blaszyk

Am 16.10.2017 21:36 schrieb "Darius Blaszyk" <[hidden email]>:
>
> Here's an interesting one. In C I have this code:
>
> #define ID1 MAKE_ID('A', 'B')
>
> Where MAKE_ID is a macro that depending on the endianness of the target will create either AB or BA.
>
> How would I be able to translate this into Pascal? ID1 preferably would need to remain a constant. I tried using an inline function without success. If all fails I will need to define them all individually using an ifdef for different endian systems. But this would be my last resort.

Best use inline functions for both ID1 and MAKE_ID. The compiler should optimize away the calls and do a constant concatenation.

Regards,
Sven


_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal