Hacker News new | ask | show | jobs
by ktjfi 2656 days ago
Isn't a.out the default output format of gcc? I think if you type "gcc myfile.c" you get an a.out executable.
6 comments

Here it refers to the binary executable file format not the default file name gcc uses after compilation.

a.out is a very old format superseded by ELF.

https://en.wikipedia.org/wiki/A.out

It's named a.out, but that's just a legacy convention. It's still an ELF file.
No it's just the file name. If you run `file` on it, it'll tell you it's an ELF image.
No, you get a file named a.out by default, but it's not in that format.
The name has stuck for some reason, but actually the output format is ELF.
As others have pointed out it's an elf file called a.out.

I would like to ask who's idea it was to name GCCs default output after a completely different file format ?!

gcc copied most of its command-line arguments from older compilers, including -o, and the default value if -o isn't set was also copied.

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

The format was named for the file, not the file for the format. By the time this became incongruous, it was too late to fix.