タイトルの通り,C言語のprintfに関して,その内容が出力されるタイミングについて疑問があったので,質問しました.
調べたところ,標準出力の出力先が端末につながっている場合,標準出力はline bufferedに設定されるということでした.つまり,printf()の内容を出力したい場合,

printf("### check\n");

のように文字列の終端に改行記号を入れてシステム側に1行が終わったことを示すか,

printf("### check");
fflush(stdout);

のように,fflush()を用いて,明示的にバッファの中身を標準出力先に出力させることのどちらかが必要だということだと理解しました.

しかし,実際には上記のようなことをしなくても,例えば

#include<stdio.h>

int main(){
  printf("test line buffering of stdout");
  return 0;
}

のように書けば,printfの内容は出力されます.

これはなぜなのでしょうか?line bufferが出力されるタイミングは,前述の2点以外にも,例えばreturn 0;の前など,いろいろあるということでしょうか?
よろしくお願いします.