Стандарт говорит что-нибудь о сосуществовании исключений и различных соглашений о вызовах? - PullRequest
0 голосов
/ 27 октября 2019

Например, что если функция, объявленная с соглашением о вызовах, вызывает обычную (стандартную) функцию, которая выдает? Таким образом, стек разматывается и ... что происходит, это должно было бы ... я даже не знаю ...

Я бы предположил, что это всего лишь UB. Но это было бы слишком грустно. Наверное, только компиляторы могут что-то сказать по этому поводу.

Стандарт действительно что-то говорит об этом?

1 Ответ

0 голосов
/ 27 октября 2019

Используемое соглашение о вызовах и внутренняя работа исключений зависят от реализации. Например, компиляторы в Linux и Windows используют разные соглашения о вызовах.

Стандарты C и C ++ определяют только то, как должны вести себя функции и исключения, но обычно не говорят много о том, как эти функции должны быть реализованы. Каждая комбинация ЦП, операционной системы и компилятора может иметь свой собственный способ реализации определенных вещей.

Если вам нужна дополнительная информация о том, как именно соглашения о вызовах реализованы в Linux и Windows на разных ЦП / компиляторах, я рекомендуювы прочитали Руководство по оптимизации Agner Fog номер 5. В этом руководстве также есть глава, посвященная обработке исключений / размотке стека.

...