реклама на сайте
подробности

 
 
> Можно ли так делать в Си или это моветон?, Функция А вызывает Б которая вызывает С и из С вернуться в А минуя Б
Димон Безпарольн...
сообщение Nov 16 2017, 06:30
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



В ассемблере так часто делал. Стек разгружал. А в Си так можно?

Если нужно конкретно платформа - Keil5, контроллер STM32.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
megajohn
сообщение Nov 16 2017, 07:54
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(Димон Безпарольный @ Nov 16 2017, 10:30) *
В ассемблере так часто делал. Стек разгружал


ой, "два CALL и один RET" или даже "два CALL и один JMP" стек не то что разгрузят, но "испортят" хоть в C хоть в ASM (не вернут в прежнее состояние, будет некий StackLeak который при таких N-вызовах порушит всё )
вы уверены в своих ранее написанных программах ? Или может я что-то не понимаю


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение Nov 16 2017, 08:30
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Цитата(megajohn @ Nov 16 2017, 10:54) *
ой, "два CALL и один RET" или даже "два CALL и один JMP" стек не то что разгрузят, но "испортят" хоть в C хоть в ASM (не вернут в прежнее состояние, будет некий StackLeak который при таких N-вызовах порушит всё )
вы уверены в своих ранее написанных программах ? Или может я что-то не понимаю

pop sp, Dec sp и jmp. Да, 15 лет до сих пор пашет.

Цитата(AlexRayne @ Nov 16 2017, 11:19) *
Да, это моветон.
Такое применяется только там где уже нечего беречь - выбрасывание исключений.

Попробовал setjmp и longjmp. Работает. Но раз моветон, применять не буду. Самому не понравилось такое решение.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 20:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016