есть у иаровского компилятора c/c++ одна неприятная фича, заключается она в оптимизации. сама по себе оптимизация это хорошо, но вот в данном конкретном случае может давать весьма неприятный результат.
всё дело в оптимизации переходов.
небольшой пример.
Код:
typedef void (*FN)();
void a(FN fn)
{
fn();
}
тут внутри функции
a идёт вызов функции по указателю.
компилируется такой код в такое: