[Swan-dev] Add -std=c99 to the compiler flags?
D. Hugh Redelmeier
hugh at mimosa.com
Thu Feb 5 08:45:20 EET 2015
| From: Andrew Cagney <andrew.cagney at gmail.com>
| On 4 February 2015 at 15:33, D. Hugh Redelmeier <hugh at mimosa.com> wrote:
| > | From: Andrew Cagney <andrew.cagney at gmail.com>
| > | for (int i = 0; i < 10; i++) { ... }
| > |
| > | without -std=c99 I get a warning :-)
| > 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.
|
| The default for GCC (i.e, up to 4.x) is -std=gnu90 ("GNU dialect of
| ISO C90 (including some C99 features)"). That is why we get away with
| doing some things, but other things get warnings.
Surely they could add the for (int i... thing too. It doesn't break
any existing program.
| > What other C99 features are worth using?
| >
| > - I think that we already use the struct and union member initializing
| > syntax
|
| GNU and C99 had different syntax, I believe we're using the new syntax.
Right. That seems to be allowed by default.
| > - 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.
|
| There's dogma arguing that we, as (what is the buzz phrase) an attack
| surface, should never allocate dynamic sized structures on the stack.
I don't that that is the reason. I think it is that it was a
divergence from C++, and now C++ kind of takes the lead.
| The behaviour of inline also changed. Specifically this case:
|
| static __inline__ struct hash_desc *ike_alg_get_hasher(int alg)
| {
| return (struct hash_desc *) ikev1_alg_find(IKE_ALG_HASH, alg);
| }
I try to avoid anything with __. It's a danger sign. Sometimes
needed.
What's changed here?
| (I'm guessing the intent is for this to be a strongly typed macro)
Yeah, probably. Mind you, I look at it the other way: #define is a
poor man's inline, one with no typechecking.
| IMNSHO we shouldn't be using inline any way. We're deluding ourselves
| if we think we can out wit the compiler: GCC will inline the things it
| likes regardless; and issue warning pointing out how we're wrong :-)
I use inline when I'm confused about our headers. It has the merit of
a macro (can be defined, not just declared in a .h). And yet it is
type safer.
I don't like it that I'm confused about our headers. Some .h files
are available to all userland but contain things only for pluto, for
example. That's bad.
Non-inline external functions are often hard to inline, depending on
the compiler architecture.
| > - <inttypes.h> I think we already use it
|
| We should be using it. Often we don't.
Clean up anything you stumble upon. That's what I try to do.
More information about the Swan-dev
mailing list