Considering making the code C++ portable

Russ Allbery rra at stanford.edu
Tue Jan 9 00:54:24 UTC 2001


Forrest J Cavalier <mibsoft at mibsoftware.com> writes:

> "new" is used as an identifier in some places as well.

> I hope Katsuhiro and Russ agree to this, under the condition that you do
> it for all the INN source.

> I think that the timing for these changes is very good.  The only reason
> not to do it is because it will break patches: (This is going to touch a
> lot of the source code.)  In the last few months there were commits
> which touched a lot of the source already.

The problem that I have with doing this is that C and C++ are very much
not the same language and that converting INN's source base to C++ from C
(which is basically what this is) can cause other problems when compiled
with a C compiler.

The canonical example is a function returning a void *, which in C++ I
think has to have its return value cast when assigned to some other
pointer:

    char *p;
    void *do_something(void);
    p = (char *) do_something();

The way to correctly write that in C is:

    p = do_something();

without the cast.  You don't want the cast in C code because if you later
change the void * to a dstring * or something, C will then properly
diagnose the mismatch, whereas if you cast it, C will silently swallow it
and segfault at runtime.

C and C++ are diverging as languages, not converging.  I guess I'm
unconvinced of the utility of converting INN's code to the greatest common
denominator, particularly given that the people working on INN are all
using C compilers and it's going to drift again, plus we'd be losing some
valuable features of C compiler checking by needing to do stuff like the
above.

Of course, I could also be wrong about C++ needing the casts, in which
case maybe there aren't as many divergences as I think there are.

-- 
Russ Allbery (rra at stanford.edu)             <http://www.eyrie.org/~eagle/>



More information about the inn-workers mailing list