Давайте розглянемо тепер поділ програми-калькулятора на декілька вихідних файли, так ніби кожна з її складових була значно більшою. Функція main опинилася би в одному файлі, який ми назвали би main.c; push, pop і їхні змінні розміщено би у другому, stack.c; getop у третьому — getop.c. Ми розділили їх одне від одного, оскільки вони складали би окремо компільовану бібліотеку у справжній програмі.
Існує ще одна річ, про яку варто потурбуватися — це визначення і оголошення, спільно використовувані цими файлами. Наскільки це можливо, ми би хотіли зосередити ці речі у одному місці, тож існуватиме тільки одна копія, яку буде прочитано і яку слід підтримувати у робочому стані під час розвитку програми. Відповідно, ми помістимо цей спільний матеріал у файлі заголовка calc.h, який буде включено у разі потреби. (Рядок #include описано у Розділі 4.11.) Отримана в результаті програма може виглядати так:
calc.h:
+---------------------+
| #define NUMBER '0' |
| void push(double); |
| double pop(void); |
| int getop(char []); |
| int getch(void); |
| void ungetch(int); |
+---------------------+
main.c:
+---------------------+
| #include <stdio.h> |
| #include <stdlib.h> |
| #include "calc.h" |
| #define MAXOP 100 |
| main() { |
| ... |
| } |
+---------------------+
getop.c: stack.c:
+--------------------+ +---------------------+
| #include <stdio.h> | | #include <stdio.h> |
| #include <ctype.h> | | #include "calc.h" |
| #include "calc.h" | | #define MAXVAL 100 |
| getop() { | | int sp = 0; |
| ... | | double val[MAXVAL]; |
| } | | void push(double) { |
+--------------------+ | ... |
| } |
getch.c: | double pop(void) { |
+---------------------+ | ... |
| #include <stdio.h> | | } |
| #define BUFSIZE 100 | +---------------------+
| char buf[BUFSIZE]; |
| int bufp = 0; |
| int getch(void) { |
| ... |
| } |
| void ungetch(int) { |
| ... |
| } |
+---------------------+
Треба знайти компроміс між бажанням, щоб кожний файл мав доступ тільки до інформації, потрібної для здійснення свого завдання і практично дійсністю того, що важко підтримувати у робочому стані багато файлів заголовка. У випадку програм помірного розміру, напевне, найкраще мати одих файл заголовка, який міститиме спільні дані для інших частин програми; саме це рішення ми продемонстрували тут. Для більших програм, може виникнути потреба в суттєвішій організації і більшій кількості файлів заголовка.