Here is the code (valid C and C++)
#include
int main() {
printf(\"asfd\");
// LINE 1
return 0;
}
If in line 1
Generally, a return from main
is not the end of your program, nor is entry to main
the start.
Usually, the linker that creates the final executable for your program marks some location, perhaps named start
, as the place where execution is to begin. When the operating system loads your program and starts executing it, it starts execution at this place. There is code there that sets up an environment: Creates a stack, sets stream states, et cetera. Then this code calls main
.
When main
returns, it returns to this special code. That code then performs various clean-up work that is required at the end of a C or C++ program, as described in this answer.
If a program is terminated abruptly, this final code might not be executed.
When main()
exits, all open streams are closed... to include stdout
. Closing the open stream flushes stdout
and what you've written to the buffer gets committed with or without the newline.
This is accomplished by these two sections in the C++ language specification:
[basic.start.main]
A return statement in
main
has the effect of leaving the main function and callingexit
with the return value as the argument.
and
[lib.support.start.term]
The function
exit
has additional behavior in this International Standard:
- ...
- Next, all open C streams with unwritten buffered data are flushed.
- ...