C:ssä (ja Javassa yms.) kaikki "funktiot" sijaitsevat samalla tasolla; kielen aliohjelmarakenne on litteä.
Jo Algol 60 salli ja toteutti aliohjelmien ja lohkojen sisäkkäiset nimiavaruudet. Sittemmin monet Algol-Pascal-linjan kielet jatkoivat käytäntöä.
Esimerkiksi Scalalla voidaan ohjelmoida seuraavaan tyyliin:
def swappauttelua(a:Int, b:Int) = {
var x = a
var y = b
def swap() {
val apu = x
x = y
y = apu
}
println(x + " " + y)
swap()
println(x + " " + y)
}
swappauttelua(1,2)
On siis mahdollista ohjelmoida paikallisia työkaluja, jotka pääsevät
käsiksi ympäröivään nimiavaruuteen.
(Samanlainen näkyvyystekniikka on muuten Javassakin
sisäluokkien sisäkkäisyydessä.)
Vastaava "sisältä ulos" -näkyvyys toteutuu myös nimeämättömissä sisäkkäisissa lohkoissa (vrt. Javaan & co., jotka sallivat sisäkkäiset lohkot, mutta vaativat silti metodin sisällä nimien yksikäsitteisyyttä):
var i=1; var j=2; var k=3;
println(i + " " + j + " " + k)
{var i=10; var j=20; // uudelleenmääritellään i ja j
println(i + " " + j + " " + k)
{var i=100 // uudelleenmääritellään i
println(i + " " + j + " " + k)
}
println(i + " " + j + " " + k)
}
println(i + " " + j + " " + k)
Tulostus:
1 2 3 10 20 3 100 20 3 10 20 3 1 2 3