GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Compiler-Errors.html ・ emacs-doc.conao3.com

17.5 コンパイラエラー

バイトコンパイルによるエラーおよび警告メッセージは、*Compile-Log* という名前のバッファに出力されます。これらのメッセージには、問題の箇所を特定するためのファイル名と行番号が含まれています。コンパイラ出力を操作するための通常の Emacs コマンドを、これらのメッセージに対しても使用できます。

プログラムの構文が不正であることに起因するエラーが発生した場合、バイトコンパイラはエラーの正確な位置を特定できなくなることがあります。調査方法の一つとして、バッファ  *Compiler Input* に切り替える方法があります。(このバッファ名はスペースで始まるため、バッファメニューには表示されません。)このバッファにはコンパイル中のプログラムが含まれており、ポインタはバイトコンパイラがどこまで読み込めたかを示しています。エラーの原因はその付近にある可能性があります。構文エラーの特定に関するヒントについては、無効なLisp構文のデバッグを参照してください。

バイトコンパイラが出力する一般的な警告の一つに、使用されたものの定義されていない関数や変数に関するものがあります。こうした警告では、欠落している関数や変数が使用されていた箇所ではなく、ファイル末尾の行番号が報告されます。これらを特定するには、ファイルを手動で検索する必要があります。

関数や変数が見つからないという警告メッセージが不当であると確信している場合は、それを抑制する方法がいくつかあります:

また、with-suppressed-warnings マクロを使用して、特定の式内でのコンパイラ警告を抑制することもできます。

特殊形式: with-suppressed-warnings warnings body…

実行上、これは (progn body...) と同等ですが、コンパイラは body で指定された条件に対して警告を出しません。 warnings は、警告シンボルと、それらが適用される関数・変数シンボルの関連付けリストです。 例えば、foo という廃止された関数を呼び出したいが、コンパイル警告を抑制したい場合は、次のように記述します。

(with-suppressed-warnings ((obsolete foo))
  (foo ...))

コンパイラ警告をより粗粒度に抑制するには、with-no-warnings 構文を使用できます:

特殊形式: with-no-warnings body…

実行上は (progn body...) と同等ですが、コンパイラは body の内部で発生する事象に対して警告を出しません。

代わりに with-suppressed-warnings を使用することを推奨しますが、この構文を使用する場合は、抑制しようとしている警告以外の警告を見逃さないよう、可能な限り最小限のコード範囲で使用してください。

Byteコンパイラの警告は、変数 byte-compile-warnings を設定することでより細かく制御できます。詳細はそのドキュメント文字列を参照してください。

バイトコンパイラの警告を error を用いて報告させたい場合があります。その場合は、byte-compile-error-on-warn に nil 以外の値を設定してください。