In C, C++, and whatever else, this what you call it when you define a function like so:
    void myfunc( char *somearg, int foo );
The actual function code itself might be in another module, another library, or later in the same source file from which you prototyped. Prototyping is typically done in header files (see #include)

C supports "non-strict" prototyping, in which you don't prototype the args, so:

    void myfunc( char *somearg, int foo );
becomes:
    void myfunc();
However C++ doesn't like this. gcc will support this with the -fno-strict-prototypes flag on a C++ file.

If you try to use a function without prototyping it, and the function isn't earlier in the same source file, then your compiler won't be too happy with you.