Včasih lahko pri programiranju strojne obdelave naletite na situacijo, ko se skupina programskih segmentov večkrat pojavi v enem samem programu ali pa se uporablja v več programih. To skupino programskih segmentov lahko ekstrahiramo, jih poimenujemo in shranimo ločeno; to skupino programskih segmentov imenujemo podprogram. Podprogram je segment obdelovalnega programa, ki ga lahko prikličejo ustrezna krmilna navodila obdelovalnega stroja in ima na splošno neodvisen pomen med obdelavo. Obdelovalni program, ki vsebuje navodilo za klic podprograma prve-nivoje, se imenuje glavni program. Navodilo za klic podprograma je prav tako programski segment, ki je na splošno sestavljen iz ukaza za klic podprograma, imena podprograma in števila klicev. Posebna pravila in formati se razlikujejo glede na sistem. Na primer, za isto navodilo "enkrat pokliči podprogram številka 55" sistem FANUC uporablja "M98 P55.", medtem ko ameriški sistem AB uporablja "P55x."
Podprogrami so lahko ugnezdeni, to je ena raven znotraj druge. Razmerje med zgornjo in spodnjo ravnjo je enako razmerju med glavnim programom in podprogramom prve-nivoje. Največje število ugnezdenih ravni je določeno s posebnim CNC sistemom. Oblika in sestava podprograma sta večinoma enaki tistim v glavnem programu: prva vrstica je številka podprograma (ime), zadnja vrstica pa je navodilo "konec podprograma", vmes pa je telo podprograma. Vendar pa navodilo za konec glavnega programa prekine glavni program in ponastavi CNC sistem; njegova navodila so standardizirana, pri čemer vsak sistem uporablja M02 ali M30. Na drugi strani ukaz za konec podprograma prekine podprogram in se vrne v glavni program ali prejšnji podprogram. Njegova navodila se med sistemi razlikujejo; na primer sistemi FANUC uporabljajo M99, sistemi Siemens uporabljajo M17 in sistemi AB (American A/B) uporabljajo M02.

