[mapserver-dev] Modernizing code base: C99 and maybe C++ ?

Even Rouault even.rouault at spatialys.com
Tue Nov 26 15:43:01 PST 2019


the kind of topics that is always controversial, but I do think this is a 
matter of survival for the project. I can write C89 code for sure, but which 
bad thing did I do to still be obliged to do it :-) ? Should new contributors 
be constrained by that... 2020 is just in a few days :-)

Do we have a strong reason to stay with C89 for our .c files ? Not being able 
to use for loop initial declarations ( that is "for( int i = 0; i < ... ; ++)" 
) is the example of something really annoying. Or being able to put 
declarations in the middle of a function instead of putting them at the 
beginning of it. This makes code harder to read, maintain and more error prone 
because of potential accidental reuse of variables that shouldn't.

All gcc and clang compilers from the last 10 years support C99. Regarding 
MSVC, MSVC >= 2015 has decent enough support of it. Do we need to support 
older MSVC versions ? I don't think so. Neither current GDAL nor PROJ can 
built with older versions 

For the record, PROJ requires C99 for its few remaining .c files (and C++11 
for .cpp. So does GDAL)

Next topic would be a

for i in *.c; do mv $i "`basename $i .c`.cpp"; done

Well, maybe not like that, because I'm expecting a ton of warnings. But more 
on a case by case basis where someone needs to do non-trivial changes in part 
of the code.

Being constrained by C deeply sucks honesty. Apart from the Linux kernel which 
still resists for good reasons, I can't think of a single one for MapServer.

The main point where C sucks is string manipulation, and MapServer does a ton 
of it. Being able to use std::string would be such a relief.

Ah for the record, we do have C++ in the code base: mapogr.cpp and the agg 


Spatialys - Geospatial professional services

More information about the mapserver-dev mailing list