Question: I found the following declaration code in the [very early sources of C compiler](https://github.com/mortdeus/legacy-cc/blob/master/last1120c/c00.c)

```
main(argc, argv)
int argv[]; { 
   return 0;
}

```

I tried to run it on ideone.com compiling it in "C" mode with gcc-4.7.2 and it compiles fine and even runs successfully

```
result: Success     time: 0s    memory: 1828 kB     returned value: 0

```

Now I'm aware that there was a pre-standard way of declaring function parameters this way:

```
int funct(crc, buf, len)
    int crc;
    register char* buf;
    int len;
{
   //function implementation
}

```

but in the latter style it's quite clear - the parameters are first just listed, then declared as if they were a kind of local variables and I see all the parameters declared and the return type.

Back to the first code

```
main(argc, argv)
int argv[]; { 
   return 0;
}

```

in the former code there're two parameters listed and only one declared and it looks like `argv` has type `array of int`.

How is it being treated by the compiler?

Answer: 
You are talking about pre-ANSI C, and the style of prototype known as K&R prototypes. For such function declarations, parameters and return values whose types are not specified are deemed to be of type `int`.
GCC comes with a non-standard setup as default. The code you posted will not compile on a conforming C compiler. 

Compile with a C compiler instead. `gcc -std=c99 -pedantic-errors` will not compile your code.