We need to kill C syntax for declaring function types
bearophile
bearophileHUGS at lycos.com
Mon Oct 4 04:27:53 PDT 2010
Don:
Thank you for bringing up this topic, Don :-)
In D, beside the C syntax for function types, there also is the C syntax for function pointers. I presume it gives less problems than the first one.
See also:
http://d.puremagic.com/issues/show_bug.cgi?id=4530
> In the past, Walter has mentioned a weak argument for retaining C-style
> array declaration syntax, although I personally find it very
> unconvincing. But C's hideous function pointer syntax is on a whole
> other level. It's really hurting us. I believe it should be deprecated
> immediately. But the 'function type' syntax shouldn't be allowed even as
> a deprecated syntax. It's horrible.
One of the faults of C++, that increases its useless complexity a lot, is to have in many cases two ways (the C way and the C++ way) to do something. Generally the idea of duplicated syntax is bad.
But I have translated lot of C code to D1 and I've seen that the possibility that D1 gives me to leave matrix definitions as they are helps me reduce the amount of changes to the C code needed to perform the translation (and I think this may help avoid some translation bugs, but I have no proof of this).
So I leave declarations like:
int mat[5][16];
And only later, when the D1 programs works correctly, I replace them by code like:
int[16][5] mat;
To merge such two needs, I have suggested a compilation switch, it may be named "-cstyle". It's designed to help translation of C code to D. If a module is compiled with -cstyle then DMD accepts C-style array declarations and C-style functions pointers, and it also gives warnings against passing by value large fixed-sized arrays and against the usage of global floating floating values before their initialization (those are two things that may trip a person that translates C code to D, because D passes fixed-sized arrays by value and doesn't initialize global floats to 0 but to NaN).
The idea is, when you need to translate C code to D you use the -cstyle switch, that allows some C syntax and gives those two extra warnings. When your code works, you may finish the translation to D and stop using the -cstyle switch.
See:
http://d.puremagic.com/issues/show_bug.cgi?id=4580
What kind of error message does your patch gives for 4962?
Bye,
bearophile
More information about the Digitalmars-d
mailing list