/
vit1251
/
cmm
Обзор
Документация
Войти
/
vit1251
/
cmm
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
examples/callback-example.cmm
54 строки
2 KB
Vitold S
Commits added a large set of example and demo programs,
26 июл 2026, 14:31
26 июл 2026, 14:31
8e0776e
Код
Авторство
О чём код?
use libc; /////////////////////////////////////////////////////////////////////// // Полноценный пример: коллбэки, лямбды, struct с коллбэками /////////////////////////////////////////////////////////////////////// // Обычная функция fn my_handler(x: i32) -> void { let s: [64]u8 = [0; 64]; snprintf(&s, 64u64, "my_handler: %d\n", x); write(1, &s, strlen(&s)); } // Функция, принимающая коллбэк fn run_async(cb: *void) -> void { // В Cmm нельзя вызвать функцию по *void напрямую, // поэтому это просто демонстрация передачи указателя write(1, "run_async called\n", 17); } // Структура с коллбэками struct Callbacks { on_data: *void, on_err: *void } fn main() -> i32 { // 1. Указатель на обычную функцию let f1: *void = &my_handler; write(1, "1: &fn ok\n", 10); // 2. Лямбда в let let f2: *void = fn(x: i32) -> void { let s: [64]u8 = [0; 64]; snprintf(&s, 64u64, " lambda called with %d\n", x); write(1, &s, strlen(&s)); }; write(1, "2: lambda ok\n", 13); // 3. Struct с лямбдами let cbs: Callbacks = Callbacks { on_data: fn(buf: *u8) -> void { write(1, " on_data: ", 12); write(1, buf, strlen(buf)); write(1, "\n", 1); }, on_err: fn(code: i32) -> void { let s: [64]u8 = [0; 64]; snprintf(&s, 64u64, " on_err: code=%d\n", code); write(1, &s, strlen(&s)); }, }; write(1, "3: struct+lambda ok\n", 20); run_async(&my_handler); run_async(f1); 0 }