Here is the code (valid C and C++)
#include <stdio.h>
int main() {
printf("asfd");
// LINE 1
return 0;
}
If in line 1 I put segfaulting expression the program would just crash without printing anything (as expected).
But why is the above code printing "asdf" and not exiting without buffer being flushed? What is under the hood and why does it work as expected?
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.
- ...