Why prototype and definition of a function in C may differ?

c

Solution

If you change:

int test();

to:

int test(void);

you will get the expected error:

foo.c:4: error: conflicting types for ‘test’
foo.c:1: error: previous declaration of ‘test’ was here

This is because `int test();` simply declares a function which takes any parameters (and is therefore compatible with your subsequent definition of `test`), whereas `int test(void);` is an actual function prototype which declares a function which takes no parameters (and which is not compatible with the subsequent definition).

Problem

I'm wondering why this will compile: ``` int test(); int main() { return test((void*)0x1234); } int test(void* data) { return 0; } ``` Why won't the compiler emit any error/warning about that (I tried clang, gcc)? If I change the return value it won't compile - but the arguments may differ?!

Original source

Related problems