Q := C div R; R:= C mod D; A2 := A2 - Q*AI; B2 B2 - Q*BI; C .= D; D:= R; R := AI; AI.- A2; A2 R; R := BI; BI:= B2; B2:= R end; X := C; Y:= A2; Z:= B2 { X = GCD(M,N) = Y*M + Z*N end { GCD }; 

## 11.2 Function Declarations 

A function declaration serves to introduce a function identifier, and to associate the identifier with a result type, with a block, and possibly with a fonnal parameter list. The function heading of a function declaration introduces the function identifier, the result type, and the fonnal parameter list. 

A function may be declared by a single function declaration consisting of the function heading and the block. This is the most common fonn. 

Alternatively, it may be declared with a "forward declaration": one function declaration consists of the function heading and the directive forward, and a second declaration in the same procedure and function declaration part consists of a function identification and the block. The function identifier in the function identification must be the identifier introduced by the first declaration. Note that the fonnal parameter list, if any, and the result type are not specified in the second declaration. 

FunctionDeclaration = FunctionHeading ";" Block I FunctionHeading ";" Directive I Functionldentification ";" Block. FunctionHeading = "function" Identifier [FormaIParameterList] ":" ResultType . ResultType = OrdinalTypeldentifier I RealTypeldentifier I PointerTypeldentifier. Functionldentification = "function" Functonldentifier. Functionldentifier = Identifier. 

The block of a function declaration must contain at least one assignment to the function identifier. The use of the function identifier in a function designator within the block of its declaration impliesrecursive execution of the function. 

