Warning/error "function declaration isn't a prototype"
c, gcc
Solution
In C `int foo()` and `int foo(void)` are different functions. `int foo()` accepts an arbitrary number of arguments, while `int foo(void)` accepts 0 arguments. In C++ they mean the same thing. I suggest that you use `void` consistently when you mean no arguments.
If you have a variable `a`, `extern int a;` is a way to tell the compiler that `a` is a symbol that might be present in a different translation unit (C compiler speak for source file), don't resolve it until link time. On the other hand, symbols which are function names are anyway resolved at link time. The meaning of a storage class specifier on a function (`extern`, `static`) only affects its visibility and `extern` is the default, so `extern` is actually unnecessary.
I suggest removing the `extern`, it is extraneous and is usually omitted.
Problem
I have a library I created, File mylib.c: ``` #include <mylib.h> int testlib() { printf("Hello, World!\n"); return (0); } ``` File mylib.h: ``` #include <stdio.h> extern int testlib(); ``` In my program, I've attempted to call this library function: File myprogram.c: ``` #include <mylib.h> int main (int argc, char *argv[]) { testlib(); return (0); } ``` When I attempt to compile this program I get the following error: ``` In file included from myprogram.c:1 mylib.h:2 warning: function declaration isn't a prototype ``` I'm using: `gcc (GCC) 3.4.5 20051201 (Red Hat 3.4.5-2)` What is the proper way to declare a function prototype?