Đôi khi khi lập trình gia công, bạn có thể gặp phải tình huống trong đó một nhóm các phân đoạn chương trình xuất hiện nhiều lần trong một chương trình hoặc được sử dụng trong một số chương trình. Chúng ta có thể trích xuất nhóm phân đoạn chương trình này, đặt tên cho chúng và lưu trữ chúng một cách riêng biệt; nhóm các đoạn chương trình này được gọi là chương trình con. Chương trình con là một đoạn chương trình gia công có thể được gọi bằng các hướng dẫn điều khiển máy công cụ thích hợp và thường có ý nghĩa độc lập trong quá trình gia công. Chương trình gia công chứa hướng dẫn gọi chương trình con cấp-đầu tiên được gọi là chương trình chính. Lệnh gọi một chương trình con cũng là một đoạn chương trình, thường bao gồm lệnh gọi chương trình con, tên chương trình con và số lượng lệnh gọi. Các quy tắc và định dạng cụ thể khác nhau tùy thuộc vào hệ thống. Ví dụ: đối với cùng một lệnh "gọi chương trình con số 55 một lần", hệ thống FANUC sử dụng "M98 P55.", trong khi hệ thống AB của Mỹ sử dụng "P55x."
Các chương trình con có thể được lồng vào nhau, nghĩa là cấp độ này bên trong cấp độ khác. Mối quan hệ giữa cấp trên và cấp dưới cũng giống như mối quan hệ giữa chương trình chính và chương trình con cấp-đầu tiên. Số lượng mức lồng nhau tối đa được xác định bởi hệ thống CNC cụ thể. Hình thức và thành phần của chương trình con phần lớn giống với chương trình chính: dòng đầu tiên là số (tên) của chương trình con và dòng cuối cùng là lệnh "kết thúc chương trình con", với phần thân chương trình con ở giữa. Tuy nhiên, lệnh kết thúc chương trình chính sẽ chấm dứt chương trình chính và đặt lại hệ thống CNC; hướng dẫn của nó được tiêu chuẩn hóa, với mỗi hệ thống sử dụng M02 hoặc M30. Mặt khác, lệnh kết thúc chương trình con sẽ kết thúc chương trình con và quay trở lại chương trình chính hoặc chương trình con trước đó. Hướng dẫn của nó khác nhau giữa các hệ thống; ví dụ: hệ thống FANUC sử dụng M99, hệ thống Siemens sử dụng M17 và hệ thống AB (American A/B) sử dụng M02.

