Isn't a.out the default output format of gcc? I think if you type "gcc myfile.c" you get an a.out executable.
a.out is a very old format superseded by ELF.
I would like to ask who's idea it was to name GCCs default output after a completely different file format ?!
So the command-line arguments and defaults are older than the ELF format. When ELF support was added, the question was: Should the default value for -o depend on other arguments? There didn't seem to be good reason to have a complicated default, and keeping the simple default provided compatibility with old scripts and makefiles.
cd tests ; for a in *.c ; do gcc $a && ./a.out ; done