Next: Byte-Code Objects, Previous: Eval During Compile, Up: Byte Compilation [Contents][Index]
バイトコンパイルのエラーメッセージと警告メッセージは、*Compile-Log*という名前のバッファーにプリントされます。これらのメッセージには、問題となる箇所を示すファイル名と行番号が含まれます。これらのメッセージにたいして、コンパイラー出力を操作する通常のEmacsコマンドが使用できます。
あるエラーがプログラムのシンタックスに由来する場合、バイトコンパイラーはエラーの正確な位置の取得に際し混乱するかもしれません。バッファー *Compiler Input*.にスイッチするのは、これを調べ1つの方法です。(このバッファー名はスペースで始まるので、Buffer Menuに表示されません。)このバッファーにはコンパイルされたプログラムと、バイトコンパイラーが読み取れた箇所からポイントがどれほど離れているかが含まれ、エラーの原因はその近傍にあるかもしれません。シンタックスエラーを見つけるヒントについては、Syntax Errorsを参照してください。
定義されていない関数や変数の使用は、バイトコンパイラーにより報告される警告のタイプとしては一般的です。そのような警告では、定義されていない関数や変数を使用した位置ではなく、そのファイルの最後の行の行番号が報告されるので、それを見つけるには手作業で検索しなければなりません。
定義のない関数や変数の警告が間違いだと確信できる場合には、警告を抑制する方法がいくつかあります:
fboundp
でテストすることで抑制できる:
(if (fboundp 'func) ...(func ...)...)
funcへの呼び出しはif
文のthen-form内になければならず、funcはfboundp
呼び出し内でクォートされていなければならない(この機能はcond
でも同様に機能する)。
boundp
テストで抑制できる:
(if (boundp 'variable) ...variable...)
variableへの参照はif
文のthen-form内になければならず、variableはboundp
呼び出し内でクォートされていなければならない。
declare-function
を使用して定義されていると告げることができる。Declaring Functionsを参照のこと。
defvar
を使用して定義されているとコンパイラーに告げることができる(これはその変数を特別な変数としてマークすることに注意。Defining Variablesを参照)。
with-no-warnings
構文を使用して特定の式にたいするコンパイラーの任意の警告をすべて抑制することもできます:
これは実行時には(progn
body...)
と等価だが、コンパイラーはbodyの中で起こるいかなる事項にたいしても警告を発しない。
わたしたちは、あなたが抑制したいと意図する警告以外の警告を失わないようにするために、可能な限り小さいコード断片にたいしてこの構文を使用することを推奨する。
変数byte-compile-warnings
をセットすることにより、コンパイラーの警告をより詳細に制御できます。詳細は変数のドキュメント文字列を参照してください。