Вы реализуете алгоритмы своей программы в библиотеке , тщательно избегая любых вещей пользовательского интерфейса. API для ваших алгоритмов указан в заголовочных файлах .
Затем вы можете написать несколько приложений, использующих эту библиотеку, одно из которых реализует интерфейс GUI, а другое - интерфейс командной строки. Они включают заголовки и компилируются с API, и вы связываете библиотеку с ним.
Будьте осторожны, чтобы не скомпилировать библиотеку и графический интерфейс с несогласованными настройками.
IME отделение алгоритмов от пользовательского интерфейса может быть достигнуто наилучшим образом, когда вы впервые реализуете интерфейс командной строки. Возможно, вам придется использовать обратные вызовы для этого разделения.