What's the difference between function declaration and function prototype?

H

Hill Pang

I can find some answer from web, but I can't find their definitions in the C99 standard so far.

Which page is it in?

Thanks in advance.
 
K

Keith Thompson

Hill Pang said:
I can find some answer from web, but I can't find their definitions in
the C99 standard so far.

Which page is it in?

A function prototype is a *kind* of function declaration, one that
specifies the types of the parameters. A non-prototype declaration
has empty parentheses; it's also known as an old-style or K&R-style
declaration, and it's obsolescent.

The term "prototype" is defined in C99 and C11 6.2.1p2:

A *function prototype* is a declaration of a function that declares
the types of its parameters.
 
E

Eric Sosman

There a little difference, but in modern context, they are same.

That seems misleading. Keith Thompson quoted the actual
definition: "A function prototype is a declaration of a function
that declares the types of its parameters." The very definition
suggests the existence of function declarations that omit the
parameter types, and indeed if you look elsewhere in the Standard
you will find the rules for declaring functions this way.

By "in modern context," I imagine you mean something like
"always use prototypes, because a compiler that can't handle them
cannot possibly be `modern'." That's good advice: There is almost
never a reason to omit the parameter types, and I'd venture that
even when a reason exists it's probably a weak one. The Standard
describes non-prototype function declarations as an "obsolecent
feature" of the language, and even if it never gets all the way to
"obsolete" the message is clear: Don't Do That.

Still, when language feature F comes in forms F1 and F2, with
F1 discouraged and F2 strongly recommended, I think someone who
asks "What's the difference between F and F2" deserves more of an
answer than "Never mind."
 
K

Keith Thompson

prototype and declaration both are same

That's incorrect. As I wrote in my response last week:

The term "prototype" is defined in C99 and C11 6.2.1p2:

A *function prototype* is a declaration of a function that declares
the types of its parameters.
 
J

James Kuyper

prototype and declaration both are same

Are you claiming that "int func();" is a function prototype? Or are you
claiming that it's not a function declaration?
 
N

Nick Keighley

On 8/7/2012 1:30 PM, Varun Tewari wrote:

     By "in modern context," I imagine you mean something like
"always use prototypes, because a compiler that can't handle them
cannot possibly be `modern'."  That's good advice: There is almost
never a reason to omit the parameter types, and I'd venture that
even when a reason exists it's probably a weak one.

maintaining K&R style code. Yes it's still about. It's only a couple
of years since I modified a K&R program.
 The Standard
describes non-prototype function declarations as an "obsolecent
feature" of the language, and even if it never gets all the way to
"obsolete" the message is clear: Don't Do That.

<snip>
 
P

Phil Carmody

Kenneth Brody said:
maintaining K&R style code. Yes it's still about. It's only a couple
of years since I modified a K&R program.
[...]

Until recently, the code I maintain had to be able to compile on
HP-UX. The C compiler that came with the system would recognize
prototypes, and tell you that you needed to buy their other C compiler
if you needed prototype support.

As I recall, there is now a gcc for HP-UX, eliminating that hurdle.

I was using gcc in HP-UX back in the 90s. I know I had access to a range
between 2.5 and 2.95, which covers most of the decade.

Phil
--
I'd argue that there is much evidence for the existence of a God.
Pics or it didn't happen.
-- Tom (/. uid 822)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top