Writing a Valid C Program Without main() by Walking the Compilation Pipeline
Writing a (valid) C program without main()

I guide you through the C compilation pipeline, from preprocessing to linking, to reveal how Linux executables actually start. By understanding the role of startup code and the _start entry point, you can build a working binary that completely bypasses the traditional main() function. This deep dive shows how to interact directly with the kernel using system calls instead of relying on the C standard library.
C is the closest you can get to the operating system without writing assembly.
- eska
Note that this is not a “valid” C program according to the standard. The standard allows for freestanding and hosted environments. Freestanding allows for the entry point to be called something else than main, but there are other requirements. See section 4 and 5 of a draft if interested.
- asveikau
I think the definition of "valid" may differ. Is this a standard conforming C program? No. Did you use implementation details of your platform to create a program that loads and runs correctly? Sure.
Most interesting C programs violate the standard in some way though.
- pjmlp
> C is the closest you can get to the operating system without writing assembly.
Nope, plenty of languages have been offering the same features since JOVIAL in 1958.
That is an urban myth spread by folks that never learnt another systems programming language, or computing history.