Depending on the programming language and how the code is written, constant expressions may be calculated during compile time, runtime or by the preprocessor before the code is handled by the compiler. Different languages, and even different versions of the same language, can handle constant expressions at various times.
Runtime constants typically make use of values based on input to a function, but this is not necessarily the case. Many programming languages, including BASIC, Perl, Fortran and C++, allow for calculations to be done at compile-time. This is usually just an option available to the programmer and not the standard way the language handles functions of constant expressions.
C++ is one language that offers particularly bountiful options for when constant expressions can be calculated. In C++, functions can be rewritten to run at either compile-time or runtime. Compile-time expressions can also be written in two different ways: using Template metaprogramming or, in C++11, with Generalized Constant Expressions. Constant expressions can also be given to the C++ preprocessor for calculation. Preprocessor directives are written like ordinary lines of code except they are prefixed by a "#" symbol.