Как я видел такие ужасные вещи в своей жизни, это можно объяснить, если в execute_calc () переполнение буфера перезаписывает адрес возврата в стеке. Когда функция заканчивается, перезаписанный адрес восстанавливается из стека и устанавливается на текущий ПК, что может привести к переходу, возможно, в другую область программы, очевидно, после вызовов подтверждения.
Хотя это очень отдаленная возможность, это то, что вы показываете.
Другая возможность состоит в том, что кто-то сделал уродливый макрос-трюк. проверьте, есть ли у вас такие вещи, как
#define assert
или какой-то коллега поместил что-то подобное в заголовок, пока вы были в туалете
#define < ==
#define > ==
Как предлагается в другом ответе, проверьте с помощью gcc -E, какой код на самом деле скомпилирован.