c-lang-defconst
c-lang-defconst is a Lisp macro in `cc-defs.el
'.
(c-lang-defconst NAME &rest ARGS)
Set the language specific values of the language constant NAME.
The second argument can optionally be a docstring. The rest of the
arguments are one or more repetitions of LANG VAL where LANG specifies
the language(s) that VAL applies to. LANG is the name of the
language, i.e. the mode name without the "-mode" suffix, or a list
of such language names, or `t' for all languages. VAL is a form to
evaluate to get the value.
If LANG isn't `t' or one of the core languages in CC Mode, it must
have been declared with `c-add-language'.
Neither NAME, LANG nor VAL are evaluated directly - they should not be
quoted. `c-lang-defconst-eval-immediately' can however be used inside
VAL to evaluate parts of it directly.
When VAL is evaluated for some language, that language is temporarily
made current so that `c-lang-const' without an explicit language can
be used inside VAL to refer to the value of a language constant in the
same language. That is particularly useful if LANG is `t'.
VAL is not evaluated right away but rather when the value is requested
with `c-lang-const'. Thus it's possible to use `c-lang-const' inside
VAL to refer to language constants that haven't been defined yet.
However, if the definition of a language constant is in another file
then that file must be loaded (at compile time) before it's safe to
reference the constant.
The assignments in ARGS are processed in sequence like `setq', so
(c-lang-const NAME) may be used inside a VAL to refer to the last
assigned value to this language constant, or a value that it has
gotten in another earlier loaded file.
To work well with repeated loads and interactive reevaluation, only
one `c-lang-defconst' for each NAME is permitted per file. If there
already is one it will be completely replaced; the value in the
earlier definition will not affect `c-lang-const' on the same
constant. A file is identified by its base name.