extern declaration and function definition both in the same file

c, declaration, extern, function-declaration

Solution

You are misunderstanding the `extern` - it does not tell the compiler the definition is in another file, it simply declares that it exists without defining it. It's perfectly okay for it to be defined in the same file.

C has the concept of declaration (declaring that something exists without defining it) and definition (actually bringing it into existence). You can declare something as often as you want but can only define it once.

Because functions have external linkage by default, the `extern` keyword is irrelevant in this case.

Problem

I was just browsing through `gcc` source files. In `gcc.c`, I found something like ``` extern int main (int, char **); int main (int argc, char **argv) { ``` Now my doubt is `extern` is to tell the compiler that the particular function is not in this file but will be found somewhere else in the project. But here, definition of `main` is immediately after the `extern` declaration. What purpose is the `extern` declaration serving then? It seems like, in this specific example, `extern` seems to be behaving like `export` that we use in assembly, wherin we export a particular symbol outside of the module Any ideas?

Original source