Bazooka Bazooka - 2 months ago 17
C Question

Implicit function declarations in C

What is meant by the term "implicit declaration of a function". Call to standard library function without including the appropriate header file produces a warning as in case of

int main(){
printf("How is this not an error ?");
return 0;
}


Shouldn't using a function without declaring it be an error ? Please explain in detail. I searched this site and found similar questions but could not find a definitive answer. Most answers said something about including the header file to get rid of the warning. But i want to know how is this not an error.

Answer

It should be considered an error. But C is an ancient language, so it's only a warning.
Compiling with -Werror (gcc) fixes this problem.

When C doesn't find a declaration, it assumes this implicit declaration: int f();, which means the function can receive whatever you give it, and returns an integer. If this happens to be close enough (and in case of printf, it is), then things can work. In some cases (e.g. the function actually returns a pointer, and pointers are larger than ints), it may cause real trouble.

Note that this was fixed in newer C standards (C99, C11). In these standards, this is an error. However, gcc doesn't implement these standards by default, so you still get the warning.