[Proj] Code style in Proj

Thomas Knudsen knudsen.thomas at gmail.com
Mon Apr 30 09:22:15 EST 2018


Yes, I understand the intention, and have used the same kind of constructs
myself earlier. I stopped using it roughly 20 years ago, since my
interpretation of the standard text led me to conclude that the construct
was not complying.

Since your tests indicate that my interpretation was wrong, I have googled
around a bit to see what other people think, and it actually appears that I
was wrong. The alternative exegesis of the gospel is given by a number of
commentators on [0], so I suppose I was wrong - and will unfortunately now
have to reread the standard to be sure :-)

/Thomas

[0]
https://stackoverflow.com/questions/7859424/why-was-mixing-declarations-and-code-forbidden-up-until-c99


2018-04-30 15:57 GMT+02:00 Kristian Evers <kreve at sdfe.dk>:

> Thomas,
>
> Actually this was part of Kurts original proposal. The else is not missing
> here as you can see from the original code [0].
> The code passed my compiler just fine with all the C89 specific flags
> turned on (as mentioned in an earlier email in
> this thread). So here it is just a block introduced to create a scope
> where declarations can be made more local to
> where they are used. If that is prohibited according to the standard I
> don’t know. I don’t have other ways to test
> standard compliance than to compile the code with C89 flags turned on. For
> a more thorough test we can create a
> pull request with the proposed changes and see how the various compilers
> on Travis and AppVeyor fares.
>
> /Kristian
>
> [0] https://github.com/OSGeo/proj.4/blob/d0fefa4104d9b655d59e400cda616f
> 0b4d407071/src/PJ_aeqd.c#L110-L126
>
>
> On 30 Apr 2018, at 15:44, Thomas Knudsen <knudsen.thomas at gmail.com> wrote:
>
> I think line 116 in Kristian's revised version misses an "else": Gnu C,
> and probably many other compilers, accepts "naked" compound statements, but
> I do not think it is in accordance with the C89 standard
>
> 2018-04-30 15:00 GMT+02:00 Kristian Evers <kreve at sdfe.dk>:
>
>> Kurt,
>>
>> I think it looks good. I tried compiling the code and again I had the
>> problem with declarations like
>>
>> XY xy = {0.0, 0.0};
>>
>> I’ve fixed those in a fork of your gist. See revision 2 in [0] for a
>> proposed solution that I think
>> is in line with your ideas
>>
>> I like how you’ve separated includes from the standard library on the
>> PROJ internal includes. On
>> a related note (for those who don’t already know) I have recently
>> introduced the proj_math.h
>> header which is intended as a PROJ replacement of math.h. proj_math.h’s
>> purpose in life is to
>> make sure that we can use C99 math functions on systems where they are
>> not available.
>> proj_math.h includes math.h and defines functions such as isnan() and
>> hypot(). This way they
>> can be used as you would on a C99-compatible system as long as
>> proj_math.h is included.
>> See revision 3 in [0].
>>
>> Would you be willing to write up a simple style guide for PROJ based on
>> the ideas you have presented in
>> this thread?
>>
>> /Kristian
>>
>> [0] https://gist.github.com/kbevers/17ec703942646e401b28a097
>> 5b28771d/revisions
>>
>> On 24 Apr 2018, at 12:05, Mateusz Loskot <mateusz at loskot.net> wrote:
>>
>> On 24 April 2018 at 11:45, Thomas Knudsen <knudsen.thomas at gmail.com>
>> wrote:
>>
>> In C too, but since C99.
>>
>>
>> AFAIK this only applies to the "for (int i = 0;  i < n; i++)" syntax.
>>
>> while (...) {
>>    int i = 123, j = 345;
>>    k = i + j;
>> }
>>
>> has been correct (and imho, preferable) syntax since K&R C
>>
>>
>> AFAIK, it's about compound statement.
>> C89 requires declaration at the top of blocks, while C99 lifts that:
>>
>> $ cat test.c
>> int main()
>> {
>>    int i = 0;
>>    while (i < 10)
>>    {
>>        int j = 345;
>>        i = i + j;
>>    }
>>
>>    {
>>        int z = 0;
>>        z = 1;
>>    }
>>    int x = 1;
>> }
>>
>> $ gcc -std=c89 -pedantic test.c
>> test.c: In function ‘main’:
>> test.c:14:5: warning: ISO C90 forbids mixed declarations and code
>> [-Wdeclaration-after-statement]
>>     int x = 1;
>>     ^~~
>>
>> $ gcc -std=c99 -pedantic test.c
>> $
>>
>>
>> Best regards,
>> --
>> Mateusz Loskot, http://mateusz.loskot.net
>> _______________________________________________
>> Proj mailing list
>> Proj at lists.maptools.org
>> http://lists.maptools.org/mailman/listinfo/proj
>>
>>
>>
>> _______________________________________________
>> Proj mailing list
>> Proj at lists.maptools.org
>> http://lists.maptools.org/mailman/listinfo/proj
>>
>
> _______________________________________________
> Proj mailing list
> Proj at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/proj
>
>
>
> _______________________________________________
> Proj mailing list
> Proj at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/proj
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.maptools.org/pipermail/proj/attachments/20180430/29b1b3c2/attachment-0001.htm 


More information about the Proj mailing list