The C standard specifies two forms of definition for `main` for a
hosted implementation:

```
int main(void) { /* ... */ }

```

and

```
int main(int argc, char *argv[]) { /* ... */ }

```

It may be defined in ways that are "equivalent" to the above (for
example, you can change the parameter names, replace `int` by a typedef
name defined as `int`, or write `char *argv[]` as `char **argv`).

It may also be defined "in some other implementation-defined manner"
-- which means that things like `int main(int argc, char *argv[],
char *envp)` are valid *if* the implementation documents them.

The "in some other implementation-defined manner" clause was not in
the 1989/1990 standard; it was added by the 1999 standard (but the
earlier standard permitted extensions, so an implementation could
still permit other forms).

My question is this: Given the current (2011) ISO C standard, is a
definition of the form

```
int main() { /* ... */ }

```

valid and portable for all hosted implementations?

(Note that I am not addressing either `void main` or the use of
`int main()` without parentheses in C++. This is just about the
distinction between `int main(void)` and `int main()` in ISO C.)