📚Загадочная библиотека setjmp.h — неочевидный инструмент для управления потоком выполнения
Библиотека setjmp.h предоставляет два необычных макроса:
• setjmp — сохраняет текущее состояние программы (регистры, стек) в буфер jmp_buf
• longjmp — «откатывает» выполнение к сохранённому состоянию, как прыжок во времени
#include <stdio.h> #include <setjmp.h>
jmp_buf jump_buffer;
void risky_function() { printf("Готовимся к прыжку...\n"); longjmp(jump_buffer, 42); // Прыжок обратно в setjmp! }
int main() { int ret = setjmp(jump_buffer); if (ret == 0) { printf("Первая инициализация...\n"); risky_function(); } else { printf("Вернулись с кодом: %d\n", ret); // Выведет 42! } return 0; }
⚠️Осторожно!
• Не заменяет исключения — нет вызова деструкторов (как в C++) • Опасность утечек — если между setjmp и longjmp выделялась память, она не освободится • Портит стек — может сломать логику функций
🛠Где может пригодиться?
• Обработка критических ошибок (а-ля «аварийный выход») • Код для встраиваемых систем, где нужно быстро восстановить состояние • Нестандартные хаки (но лучше так не делать 😈)
📚Загадочная библиотека setjmp.h — неочевидный инструмент для управления потоком выполнения
Библиотека setjmp.h предоставляет два необычных макроса:
• setjmp — сохраняет текущее состояние программы (регистры, стек) в буфер jmp_buf
• longjmp — «откатывает» выполнение к сохранённому состоянию, как прыжок во времени
#include <stdio.h> #include <setjmp.h>
jmp_buf jump_buffer;
void risky_function() { printf("Готовимся к прыжку...\n"); longjmp(jump_buffer, 42); // Прыжок обратно в setjmp! }
int main() { int ret = setjmp(jump_buffer); if (ret == 0) { printf("Первая инициализация...\n"); risky_function(); } else { printf("Вернулись с кодом: %d\n", ret); // Выведет 42! } return 0; }
⚠️Осторожно!
• Не заменяет исключения — нет вызова деструкторов (как в C++) • Опасность утечек — если между setjmp и longjmp выделялась память, она не освободится • Портит стек — может сломать логику функций
🛠Где может пригодиться?
• Обработка критических ошибок (а-ля «аварийный выход») • Код для встраиваемых систем, где нужно быстро восстановить состояние • Нестандартные хаки (но лучше так не делать 😈)
Bitcoin mining is the process of adding new transactions to the Bitcoin blockchain. It’s a tough job. People who choose to mine Bitcoin use a process called proof of work, deploying computers in a race to solve mathematical puzzles that verify transactions.To entice miners to keep racing to solve the puzzles and support the overall system, the Bitcoin code rewards miners with new Bitcoins. “This is how new coins are created” and new transactions are added to the blockchain, says Okoro.
Pinterest (PINS) Stock Sinks As Market Gains
Pinterest (PINS) closed at $71.75 in the latest trading session, marking a -0.18% move from the prior day. This change lagged the S&P 500's daily gain of 0.1%. Meanwhile, the Dow gained 0.9%, and the Nasdaq, a tech-heavy index, lost 0.59%.
Heading into today, shares of the digital pinboard and shopping tool company had lost 17.41% over the past month, lagging the Computer and Technology sector's loss of 5.38% and the S&P 500's gain of 0.71% in that time.
Investors will be hoping for strength from PINS as it approaches its next earnings release. The company is expected to report EPS of $0.07, up 170% from the prior-year quarter. Our most recent consensus estimate is calling for quarterly revenue of $467.87 million, up 72.05% from the year-ago period.