When PL/I requires a (possibly signed) integer constant, a restricted expression can be used. A restricted expression is an expression whose value is calculated at compile time and used as a constant. For example, you can use expressions to define constants required for: 
	 
 
		-  Character string lengths in STATIC declarations 
		
 
 
		-  Character string lengths for other storage classes (non-structure members) 
		
 
 
		- Extents in static declarations 
		
 
 
		-  Values used in static initialization 
		
 
 
	 
 
	  
 
	 A restricted expression is identical to a normal expression, but requires that each operand be either: 
	 
 
	  
		- A constant or a named constant. You must declare a named constant before using it. 
		
 
 
		- A built-in function applied to a restricted expression(s). 
		
 
 
	 
 
	  If using a built-in function, it must be from one of the following categories: 
	 
 
	 
		- String-handling functions (COPY, REPEAT, LOW, and HIGH) 
		
 
		-  Array-handling functions (DIMENSION, LBOUND, and HBOUND) 
		
 
		- Storage-control functions (BINARYVALUE, LENGTH, MAXLENGTH, NULL, OFFSETVALUE, POINTERVALUE, SIZE, STORAGE, and SYSNULL) 
		
 
	 
	 Restricted expression evaluation is done on RETURNS descriptors in entry declarations.