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