Procedure

Et underprogram, der kan kaldes fra et andet underprogram eller et hovedprogram, og som selv kan kalde andre procedurer. I sprog, der behandles af en oversætter, vil en procedure være den mindste programenhed, der kan oversættes selvstændigt til objektkode. I modsætning til makroer genbruges procedurer, hvis de kaldes fra mere end ét sted i det samlede program. Denne egenskab gør det i visse tilfælde muligt, at en procedure kalder sig selv (rekursivt kald). I kildeprogrammer defineres en procedure af en erklæring, hvorefter følger en procedurekrop. Undertiden skelnes mellem en procedure og en subrutine ved, at en procedure tillader andre procedure-definitioner mellem erklæring og krop.

Ved procedurekald skal som minimum gemmes en returadresse, så udførelsen af programmet kan fortsættes et veldefineret sted (normalt lige efter kaldet), når proceduren afsluttes. I de fleste systemer gemmes returadressen på en stak. Ved rekursive kald er dette en nødvendighed, da hvert kald skal have sin egen private returadresse. Ofte ledsages et procedurekald af parameteroverførsel (i modsætning til parametersubstitution). Også parametre kan gemmes på en stak.

Der er ret forskellige konventioner for parameteroverførsel i forskellige programmeringssprog. Dels kan et sprog tillade overførsel af både parameterværdier og parameteradresser eller alene af parameteradresser, dels kan parametrenes rækkefølge variere. Eksempelvis tillader Pascal parameteroverførsel både som adresse ("by reference") og som værdi ("by value"), og da Pascal forbyder et variabelt antal parametre, foregår lagring af parameteradresser og -værdier normalt i samme rækkefølge, som parametrene har i procedureerklæringen. I sproget C er rækkefølgen som standard den omvendte af Pascal-konventionen, da C tillader et variabelt antal parametre.

Ordet procedure benyttes mere eller mindre synonymt med rutine, subrutine og underrutine. En rutine, der returnerer netop én værdi, kaldes i flere programmeringssprog en funktion. I sproget C kaldes alle rutiner dog funktioner - selv hovedprogrammet (main). Se også remote procedure call.

Forfattere: 
Henning Mejer
Casper Thomsen