C言語において外部変数(がいぶへんすう、global variable)とは全ての関数の外で定義される変数です。外部変数はどの関数からでもアクセス可能です。グローバル変数、大域変数とも呼ばれます。
関数内でのみ存在する局所変数(ローカル変数)と異なり、外部変数は永久に存在します。ある関数で外部変数に値をセットしたら、その関数の処理が終了しても、外部変数の値はそのまま残ります。また、外部変数は定義時に明示的に初期化されていなければ、0で初期化されます。
外部変数は多数の関数を通して継続的に使用される場合に適しています。局所変数にしてしまうと、引数として受け渡しが増大してしまうからです。
また、外部変数は多数の関数が利用するため、いつどの関数がどのようにその外部変数を利用しているかが把握しづらいという弱点があります。そのため、外部変数の安易な利用が不具合(バグ)の原因になったり、修正のしにくいプログラム設計になるといった保守性低下の原因となったりすることがあります。外部変数の使用は設計時に充分に検討する必要があります。