This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: What is the correct prototype of md_atof?


Hi Ian,

> > gas/tc.h has
> > 
> >   char *md_atof PARAMS ((int what_statement_type, char *literalP, int *sizeP));
> > 
> > but so many gas/config/tc-*.c has
> > 
> >   char *
> >   md_atof (type, litP, sizeP)
> >        int type; <- Notice it's int!!
> >        char *litP;
> >        int *sizeP;
> > 
> > I noticed this problem while converting tc-h8300.c into ISO-C.  To me
> > "char" seems to be correct here.  What do others think?
> 
> Looks like `int' in both places, so what's the problem?

Oops.  I meant to say that so many gas/config/tc-*.c has char for the
first argument of md_atof.

> The code uses `int' because in traditional C, with no prototypes, a
> char is always promoted to int anyhow.  If you write `char' in a
> prototype, but then don't use a prototype when defining the function,
> the 'char' in the function definition will be promoted to `int'.
> Since the function definition then does not match the prototype, there
> is a potential problem.
> 
> If we convert to C90 and use a prototype style definition, then we can
> safely switch to `char'.

The only reason why I said "char" is correct is that the first
argument contains a character.  "int" wouldn't be wrong, but I am not
comfortable with the mismatch between the definition and the
prototype.  Should I change every md_atof to use char for the first
argument?

Kazu Hirata


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]