It is a historical artefact, so in other words a legacy throwback. Historically `a.out` stands for "assembler output".
`a.out` is now only the name of the file but before it was also the file format of the executable.
The `a.out` executable format is nowadays uncommonly supported. The ELF format has wider use, but we still keep the old name for the default output of the C compiler.