Czasami podczas programowania obróbki można spotkać się z sytuacją, w której grupa segmentów programu pojawia się wielokrotnie w jednym programie lub jest używana w kilku programach. Możemy wyodrębnić tę grupę segmentów programu, nazwać je i przechowywać osobno; ta grupa segmentów programu nazywana jest podprogramem. Podprogram jest segmentem programu obróbki, który można wywołać za pomocą odpowiednich instrukcji sterujących obrabiarki i na ogół ma on niezależne znaczenie podczas obróbki. Program obróbki zawierający instrukcję wywołania podprogramu pierwszego-poziomu nazywany jest programem głównym. Instrukcja wywołania podprogramu jest również segmentem programu, który zazwyczaj składa się z instrukcji wywołania podprogramu, nazwy podprogramu i liczby wywołań. Konkretne zasady i formaty różnią się w zależności od systemu. Na przykład dla tej samej instrukcji „wywołaj jeden raz podprogram numer 55” system FANUC używa „M98 P55.”, podczas gdy amerykański system AB używa „P55x”.
Podprogramy mogą być zagnieżdżane, to znaczy jeden poziom wewnątrz drugiego. Zależność między górnym i dolnym poziomem jest taka sama, jak relacja między programem głównym a podprogramem pierwszego-poziomu. Maksymalna liczba zagnieżdżonych poziomów jest określana przez konkretny system CNC. Forma i skład podprogramu są w dużej mierze takie same jak w programie głównym: pierwsza linia to numer podprogramu (nazwa), a ostatnia linia to instrukcja „końca podprogramu”, z treścią podprogramu pomiędzy. Jednakże instrukcja zakończenia programu głównego kończy program główny i resetuje system CNC; jego instrukcje są ustandaryzowane, przy czym każdy system wykorzystuje M02 lub M30. Z drugiej strony instrukcja zakończenia podprogramu kończy podprogram i powraca do programu głównego lub poprzedniego podprogramu. Jego instrukcje różnią się w zależności od systemu; na przykład systemy FANUC korzystają z M99, systemy Siemens korzystają z M17, a systemy AB (amerykańskie A/B) korzystają z M02.

