is a language style where values remain while there are ways to access them.
An implementation of C in such a style would deem the above program value and require that it print 42.
Such a compiled program could not use the classic stack logic for the value in ip, which is the address momentarily allocated to the identifier x is invalid as soon as routine returns and its stack frame is deallocated.
Scheme, Smalltalk and JavaScript are languages with indefinite extent.
Strategically the most significant values that remain after a routine returns are those accessible by routines defined lexically within the called routine.
Nested procedures do the heavy lifting in languages such as SmallTalk.
Here is a sample SmallTalk program from here:
n := 1.
[ n < 1000 ] whileTrue: [ n := n*2 ].
n → 1024
This program can be transcribed literally to C as follows:
#include <stdio.h>
typedef int t(void);
typedef void a(void);
void whileTrue(t, a); // prototype for system supplied primitive
int main(){
int n = 1;
int test(){return n < 1000;}
void act(){n = n*2;}
whileTrue(test, act);
printf("%d\n", n);
return 0;}
void whileTrue(t tst, a act){ while(tst()) act();}
The above program is not valid C but is valid gcc.
Whereas the while construct is primitive in C the whileTrue function is primitive in SmallTalk, or at least provided as a standard function.
This example illustrates nested functions but indefinite extent.
SmallTalk provides indefinite extent but not gcc.