Hi Rob,
Thank you for testing the example with your compiler, and also thank you for
the wonderful advice. I will remove the index variable declaration from the for
loop.
>> for (int ix=0; ix < N_MP; ix++) {
Cheers,
Ron.
> On 9 Dec 2016, at 7:24 am, <[email protected]>
> <[email protected]> wrote:
>
> Hi Ron,
>
> The original rendition compiles on Windows ok if the compiler being used is
> gcc. (I think you said you had tested it on ActivePerl 5.24.0 and found it to
> be fine.)
>
> However, with my MS compiler (Microsoft (R) C/C++ Optimizing Compiler Version
> 14.00.40310.41 for AMD64), I got:
>
> Microsoft (R) Program Maintenance Utility Version 7.00.8882
> Copyright (C) Microsoft Corp 1988-2000. All rights reserved.
>
> cl -c -I"C:/_32/pscrpt/inline" -nologo -GF -W3 -MD -Zi -DNDEBUG -Ox -G
> L -fp:precise -DWIN32 -D_CONSOLE -DNO_STRICT -DWIN64 -DCONSERVATIVE
> -DPERL_TEXTM
> ODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS
> -DUS
> E_PERLIO -std=c99 -MD -Zi -DNDEBUG -Ox -GL -fp:precise -DVERSION=\"0.00\"
> -D
> XS_VERSION=\"0.00\" "-IC:\_64\ap1600\lib\CORE" try_pl_7dcf.c
> cl : Command line warning D9002 : ignoring unknown option '-std=c99'
>
>
> Admittedly, that MS compiler is getting a little bit old but my understanding
> is that even the most recent MS compilers are not C99 compliant (as MS like
> to make up their own rules).
> FAIK there might also be other non C99 compliant compilers in use.
>
> Both ActiveState and StrawberryPerl provide gcc-based perls for Windows, but
> there are still people using MS compilers with perl on Windows. (I'm not
> really one of those people - I keep that MS compiler for reference only.)
>
> So I think, for a cookbook especially, it's best to code for the lowest
> common denominator unless that's impractical - though I'm sure that use of
> non C99 compliant compilers with perl is the exception rather than the rule.
>
> Cheers,
> Rob
>
> -----Original Message----- From: Ron Grunwald via inline
> Sent: Friday, December 09, 2016 9:27 AM
> To: [email protected]
> Cc: [email protected]
> Subject: Re: Inline::C Cookbook addition
>
> Hi Rob,
>
> So I gather that the example in its original state did not compile on
> Windows? I would be somewhat surprised that there are still C compilers in
> use that are not C99 compliant.
>
> Many thanks for your suggestions, and I will follow your advice on using the
> github process.
>
> Cheers,
> Ron.
>
>> On 8 Dec 2016, at 3:08 pm, [email protected] wrote:
>>
>> The "use Inline C => Config => ..." line can be removed if you rewrite the
>> __C__ section as:
>>
>> __DATA__
>> __C__
>> #define N_MP 4
>>
>> void CalcSurfaceHeights() {
>> double x[N_MP], y[N_MP], z;
>> int ix;
>> char *mesh_data = SvPV_nolen(get_sv("main::mesh_data", 0));
>>
>> sscanf(mesh_data, "MESH-POINTS %lf%lf%lf%lf%lf%lf%lf%lf",
>> x, y, x+1, y+1, x+2, y+2, x+3, y+3);
>>
>> for (ix=0; ix < N_MP; ix++) {
>> z = 0.5*( sin(x[ix]) + sin(y[ix]) );
>>
>> printf("Surface-Height: %6.3f Mesh-Point: %6.2f, %6.2f\n",
>> z, x[ix], y[ix]);
>> }
>> }
>>
>> All I've done is move the declaration of "ix" from the for() loop to the
>> declaration section at the beginning of CalcSurfaceHeights().
>> This then enables the code to compile using compilers (such as Microsoft
>> compilers) that are not C99-compliant.
>>
>> This mailing list is very quiet these days and I think your request will
>> probably fall "through the cracks" unless you submit it as a github "Issue"
>> or a github pull request.
>>
>> Cheers,
>> Rob