コンパイルエラー【compile error】
概要
人間が読み書き可能な言語で書かれたプログラムは、コンピュータが直に解釈・実行可能な形式に変換する必要がある。この変換をソフトウェア開発時などに一括して行うことを「コンパイル」(compile)と呼び、「コンパイラ」(compiler)という専用のソフトウェアを用いる。
コンパイラはソースコードを読み込んで先頭から順に実行可能コードに置き換えて出力していくが、途中で何らかの致命的な問題が生じ、変換を中断して終了してしまう事態を「コンパイルエラー」という。原因を取り除くまで実行可能形式のプログラムを得ることはできない。
主な原因
最も多い原因はソースコード中に含まれる誤ったコードで、当該箇所の解析・変換が不可能となりエラーが発生する。単純なタイプミスや、括弧の欠落や過多など対応関係の不整合、関数呼び出しの引数の数やデータ型の不一致、演算式中の値のデータ型の不一致などが該当する。
一見、言語の構文や文法に則っているように見えるプログラムでも、未定義の変数や関数をいきなり呼び出そうとするなど、論理的な不整合がある場合にはエラーとなることがある。日本語の文字列リテラルなどを含む場合には文字コードをコンパイラが正しく認識・処理できずにエラーとなることもある。
また、ソースコードの読み込みや変換処理に必要なメモリ領域が足りない、変換後のプログラムを保存するストレージ領域が足りない、プログラム中から参照している外部のモジュールやライブラリが開発環境に用意されていないなど、直接的なコードの誤り以外の要因によって発生する場合もある。
対処法
コンパイルエラーが発生すると、その種類や原因、問題が発生したソースファイル、当該箇所の行番号やコード断片などをエラーコードやエラーメッセージとして出力するコンパイラが多い。開発者はこのメッセージを頼りに原因を探り、問題を解消する。
コンパイラが指摘する問題がそのまま改めるべき原因であるとは限らない。例えば、コンパイラがコード中に構文エラーを指摘したが、実はコンパイラのバージョンが古くて最新の言語仕様に対応しておらず、コンパイラを最新版に置き換えたら解消した、といった事例も存在する。
類似する事象
エラーとして変換を中止するほどではないが、言語仕様などに照らして好ましくないコードや潜在的な問題箇所を発見した場合は「ワーニング」(warning:警告)と呼ばれるメッセージを出力して開発者に注意を促すことがある。
コンパイル時ではなくプログラムの実行時に致命的な問題が発生し実行を中断・異常終了することは「実行時エラー」「ランタイムエラー」(runtime error)という。コンパイルエラーを解消して正しく実行ファイルを構成できたとしても、実行に必要なメモリ容量が実行環境に用意されていないなどの理由で実行時エラーが発生してプログラムが停止することは起こり得る。
