C++ аналог ассемблерного call. Не вызов C++ функции, именно call.

программирование C++ assembler ASM

При вызове функции из области видимости уходят локальные переменные, при переходе по goto в стек не кладется адрес для возврата (и вообще к стеку из сей не подойти на прямую). Хочется заиметь функционал call. Как это сделать?
Интересует хорошее решение, которое, скажем, хорошо бы работало рекурсивно и многопоточно.
Ответы:
ассемблерные вставки не вариант штоле?
Судя по вопросу, ты пока не понял, зачем вообще были созданы языки высокого уровня.
Если тебе нужно оперировать с какими-то дополнительными переменными внутри функции - передавай их вовнутрь как параметры.
Создаёте новый класс: локальные переменные преобразовываете в члены класса, функции, которые Вам надо вызывать с сохранением доступа к локальным переменным, тоже делаете членами этого класса.
boost.Context или boost.Coroutine
если знаешь, куда call, то можно запросто так: пусть у нас функция, которую мы вызываем - int func(int x, int y)
тогда мы можем создать переменную void (*callFunc)() = (void(*)())func; и чтобы сделать просто call мы должны вызвать callFunc - просто callFunc(); если это скомпилить, то будет только call... в данном случае, callFunc - указатель на функцию, которая ничего не возвращает и ничего не принимает, ну и, естественно, к ней мы можем привести функцию любого типа, приведение типов - великая штука...
думаю, уже не актуально, но все же...


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.