Note: The following is not a definition of
actual FreeVariables as seen in mathematics, but that of top level lexically scoped variables.
A
free variable is a variable used within a function, which is neither a formal parameter to the function nor defined in the function's body (and in scope at the point of the variable's use).
For example, in this C function,
printf and
phase_shift are free variables. The first is a standard library function; the second had better be defined by the programmer; else this function is in error.
angle, being a formal parameter, is not a free variable; nor is
x.
The first use of
sin is a
FreeVariable; it too is a standard library function (one which returns the sine of the angle). The second use of
sin (in the if statement) is not, as a local definition for
sin is provided (which shadows the library function).
We could argue that "double", "if", and "int" are
FreeVariables as well; but those are keywords so we'll ignore them.
void silly (double angle)
{
double x = sin (angle + phase_shift);
printf ("The sine of the angle, phase shifted, is %f\n", x);
if (angle > 0)
{
int sin = 7;
printf ("There are %d deadly sins, %d if you count "
"pointer arithmetic\n", sin, sin+1);
}
}
Programming languages handle free variables via one of the
ScopingRules.