This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
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