[Swan-dev] Add -std=c99 to the compiler flags?
Lennart Sorensen
lsorense at csclub.uwaterloo.ca
Wed Feb 4 23:10:34 EET 2015
On Wed, Feb 04, 2015 at 03:33:50PM -0500, D. Hugh Redelmeier wrote:
> When the code was originally written, there was no c99. I guess we
> are long past those days and we should start taking advantage of the
> new features.
>
> I think declaring the variable in the for-head is one of the nicer
> little features. It goes along with my desire to keep variables as
> local as possible.
>
> There has been a strong temptation to use the same index variable in
> sibling for statements: it cuts down in the number of declarations and
> lines. I think this new form eliminates that excuse.
>
> Why does gcc require a flag? Is using c99 so remarkable that it cannot be
> the default? Is there any downside? At least some things we already use
> were introduced in C99.
Well making it the default could make older code no longer compile.
That's pretty bad (and would be rather like what modern C++ compilers
do to older perfectly valid C++ code).
So I think gcc's behaviour for C99 is much better than g++'s treatment
of older C++ code.
> What other C99 features are worth using?
>
> - local declarations mixed in with statements. We've avoided this
> (mostly) but it is sometimes quite nice. Actually, this predates C99.
> This allows us to have fewer variables that are uninitialized.
Certainly something that can have lots of arguments over weather that
is a great idea or terrible code style.
> - I think that we already use the struct and union member initializing
> syntax
>
> - Variable Length Arrays (VLAs) have been made optional-to-support in the
> more recent standards so we should not use them. Too bad: they could
> do what alloca was used for.
I can't remember what the problem they caused was and why they were
made optional. Must have been some reason.
> - inline functions -- we already use them. How come we don't need
> -std=c99 already?
Just because they are now part of the standard and hence required to be
supported by a standards compliant compiler does not mean compilers were
not allowed to permit them before hand.
> - <stdbool.h>: we should replace the bool abstraction that I created.
> Should be trivial
>
> - <inttypes.h> I think we already use it
Those two are certainly nice things to be able to rely on.
> - // we use this a bit. I don't like it except in special cases.
>
> - compound literals: might be useful
OK I am going to have to go look up what that is. Hmm, having looked them
up I am still not sure what is supposed to be new and exiting about them.
--
Len Sorensen
More information about the Swan-dev
mailing list