ヘッダーでは、マクロ assert を定義しています。 このマクロは、プログラムが行う仮定を検証し、この仮定が間違っている場合に診断メッセージを表示するために使用することができます。
実行すると、式が偽（つまり0に等しい比較）の場合、assertはstderrに失敗した呼び出しの情報を書き込み、その後abort()を呼び出します。 stderrに書き込まれる情報には以下が含まれます。
[https://paiza.io/projects/zmVeCiHxK7w2gRycNJuCpw?language=c コード例]
int main(void)
{
	assert(0);
}
実行結果
Main: Main.c:5: int main(void): Assertion `0' failed.
__TOC__
プログラマはソースコードを変更することなくアサーションを排除することができます。
マクロ NDEBUG が  のインクルード前に定義されている場合、assert マクロは単に次のように定義されます。
のように定義されているため、プログラムには何の影響も与えず、その引数を評価することもありません。したがって、assertに渡される式は、デバッグが無効なときには起こらないので、副作用を「含まない」ものでなければなりません。例えば、以下のようになります。
assert(x = gets())
は、デバッグが無効の場合には行を読み込まず x に値を代入しません。
ISO/IEC 9899:2017 § 7.2.1.1 ''The assert macro''。
形式 : 
void assert(scalar expression);
機能
assert マクロは、プログラムに診断テストを行うもので、void 式に展開されます。このマクロが実行されると、expression（スカラー型でなければならない）がfalse（つまり0と比較される）の場合、assertマクロは失敗した特定の呼び出しに関する情報（引数のテキスト、ソースファイルの名前、ソース行番号、包含する関数の名前（後者はそれぞれ前処理マクロ__FILE__、__LINE__および識別子__func__の値）を含む）を、実装で定義された形式で標準エラーストリームに書き込みます。
返却値
assertマクロは値を返しません。
static_assert : キーワード _Static_assert に展開されます。
_Static_assert は、コンパイル時に確定される式に対するアサーションです。
形式
_Static_assert ( constant-expression , string-literal ) ;
制約事項
constant-expressionは、0と比較して不等でなければならない。
セマンティクス
定数式は、整数の定数式でなければならない。
定数式の値が0と比較して不等であれば、この宣言は何の効果もありません。
それ以外の場合は制約に違反し、実装は文字列リテラルのテキストを含む診断メッセージを生成します。
文字列リテラルのテキストを含む診断メッセージを作成しなければならない。
ただし、文字セットにない文字はメッセージに表示する必要はありません。
C23では、string-literal は省略可能です。
C99規格では、ヘッダーassert.hで関数を宣言する必要はありません。
assertマクロの定義は、ヘッダーassert.hで定義されていないNDEBUGというマクロの状態に依存する。 マクロ NDEBUG は、デバッグ情報を使用しないことを示す。 NDEBUGが定義されている場合、assertは何もしない（引数の評価もしない）式として定義される。 それ以外の場合、assertはテストする式が偽の場合にデバッグ情報を表示する。