В си решение будет зависеть от выбора платформы, под которую разрабатываешь, для win32 gui вполне возможно что тебе хватит отлавливать закрытие окна на событии WM_CLOSE в твоем главном цикле обработки событий окна, а для posix это регистрация колбек с помощью signal на тип события SIGTERM (там можно и на другие события повеситься, даже к примеру на принудительное завершение ядром процесса по исчерпанию лимита оперативной памяти)...
Первая же ссылка в гугле по запросу:
c++ exit current process callback, направление поиска указано в вопросе. Не все виды завершения работы процесса могут быть отловлены самим процессом, в частности у вопрошающего проблема с консольным приложением в windows... возможно если порыть msdn можно будет найти еще какое решение.