User functions are declared as in ANSI C. The data types available for the function type are: void, matrix, vector, string, int, double. These data types, except for void, are also available for declaring arguments and local variables. Additionally, declarations of local variables may specify a storage class of extern, static, or auto (the default is auto) and an initialization. The default data type of arguments is matrix. Functions must be declared before they are used in the definitions of other functions. Examples: void f(double x); /* just declares f */ int g( matrix a, int m, n) /* defines g */ { matrix x; int i, j; ... } Arguments declared as int or double are passed by value. Arguments declared as matrix, vector, or string are passed by address. Functions declared as int or double return a value. Functions declared as matrix, vector, or string can return a variable or a value. Declared types do not affect the type of data a variable can hold. int a = [1.0 2.0 3.0] is legal but not recommended.