Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Advantages of function prototyping [closed]

After half an hour of research on the Internet, I couldn't find any reasoned discussion of the advantages of function prototyping.

I manage in Java/Android, and am beginning a C course. Prototyping looks cumbersome compared to my previous experience, and I would like to know the reason(s) why it still exists in 2013.

I understand that life was more difficult for Ritchie and pals; however, a compiler could be written today that would generate a list of functions in a first pass, then do its usual thing using that list of functions as a current compiler would use a header file.

It probably can't persist either only because of backwards compatibility. It would be feasible to create a compiler that could switch between current operation mode, and the hypothetical new mode I just described, depending on the code it is shown.

If prototyping persists, it must therefore have an interest for the programmer, not for the compiler programmer. Am I right or wrong - and where can I find a reasoned discussion of the advantages of function prototyping vs. no prototyping?

like image 723
pouzzler Avatar asked Dec 20 '22 10:12

pouzzler


2 Answers

You're forgetting that in C you can call a function whose source you don't have.

C supports binary distribution of code, which is quite common for (commercial) libraries.

You get a header that declares the API (all functions and data types) and the code in a .lib (or whatever your platform uses) file. This is typically the case for all of C's standard library; you don't always get the source to the compiler vendor's library but you must still be able to call the functions, of course.

For that to work, the C compiler must have the declarations when processing your code, so it can generate the proper arguments for the call, and of course deal with any return value correctly.

It's not enough to just rely on your source, since if you do

GRAPHICSAPI_SetColorRGB(1, 1, 1);

but the actual declaration is:

void GRAPHICSAPI_SetColorRGB(double red, double green, double blue);

the compiler cannot magically convert your int arguments to double if it doesn't have the prototype. Of course, having the prototype makes it possible to error-check that the call makes sense, which is very valuable.

like image 179
unwind Avatar answered Dec 24 '22 01:12

unwind


Interesting idea about having the compiler have a first look over all source files to take notice of all functions prototypes.

However

  • libraries (object code) need to have their declarations somewhere, this is why the includes exist

Also I find convenient to be able to grep the includes as "free text", like

grep alloc /usr/includes/*
like image 42
Déjà vu Avatar answered Dec 24 '22 01:12

Déjà vu