The general form is: type name qualifiers = init; type: one of int, char, ...etc..., user defined types name: [a-zA-Z_][a-zA-Z_0-9]* qualifiers: one of '*', '[' number ']', '(' arg_list ')' init: one of '{' func body '}' '[' array init ']' '(' struct contents ')' /*examples*/ int(int a) x = { return a+3; }; /* is valid, and is also the same as */ int x(int a) = { return a+3; }; /*note these can be mixed, since an fn decl is identical to a variable decl:*/ int a = 3, x(int n) = {return n+4;}, y[3] = [1, 2, 3];