フリースタンディング環境
フリースタンディング環境はOSから提供される機能が無いこと、プログラムを書き込む記憶領域が狭いことを想定し、ホスト環境で標準Cライブラリとして要求される関数は、Cでは一切要求せず、またC++では言語機能を実装するために必要とされる最低限のものしか要求しない。Cにおいては定義を記述したヘッダーファイルのみを要求する(詳細は#制限を参照)。このため、Cにおいてはホスト環境で必要とされるランタイムライブラリを必要としない。
ホスト環境におけるmain関数は、プログラムを呼び出した親プログラム(OS等)の存在を想定しており、フリースタンディング環境のエントリーポイントとしては過剰である。またmainという名前が、main関数を呼び出すスタートアップコードを用意する上で邪魔になる(main関数を呼び出す関数がmainでは他にmainを定義できない)ため、エントリーポイントはmain関数とは名前も形式も異なる関数にすることができるようになっている。
フリースタンディング環境では言語仕様に以下の制限を受ける。
エントリーポイントはmain関数である必要はなく、関数の型および名称は処理系定義となる。GCC の場合、デフォルトは void _start(void)。
標準Cライブラリの大部分がサポートされない。フリースタンディング環境でもサポートされる標準ライブラリを以下に挙げる。 C89の場合、float.h、limits.h、stdarg.h、stddef.h C95の場合、C89の標準ライブラリ、iso646.h C99の場合、C95の標準ライブラリ、stdbool.h、stdint.h C11の場合、C99の標準ライブラリ、stdalign.h、stdnoreturn.h C++03の場合、exception、limits、cstdarg、cstddef、cstdlib(abort、atexit、exitのみ)、new、typeinfo