通常のLisp変数には、有効なLispオブジェクトである任意の値を割り当てることができます。しかしLispではなくCで定義されたLisp変数もあります。これらの変数のほとんどは、DEFVAR_LISPを使用してCコードで定義されています。Lispで定義された変数と同様、これらは任意の値をとることができます。しかしいくつかの変数はDEFVAR_INTやDEFVAR_BOOLを使用して定義されています。C実装の概要的な議論は、Writing Emacs
Primitives、特にsyms_of_filename型の関数の説明を参照してください。
DEFVAR_BOOL型の変数は、値にnilかtしかとることができません。他の値の割り当てを試みるとtがセットされます:
(let ((display-hourglass 5))
display-hourglass)
⇒ t
この変数はDEFVAR_BOOL型のすべての変数のリストを保持する。
DEFVAR_INT型の変数は、整数値だけをとることができます。他の値の割り当てを試みると結果はエラーになります:
(setq undo-limit 1000.0) error→ Wrong type argument: integerp, 1000.0